Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 106 | 106 |
| 107 RenderViewHostImpl* RenderFrameHostManager::pending_render_view_host() const { | 107 RenderViewHostImpl* RenderFrameHostManager::pending_render_view_host() const { |
| 108 if (!pending_render_frame_host_) | 108 if (!pending_render_frame_host_) |
| 109 return NULL; | 109 return NULL; |
| 110 return pending_render_frame_host_->render_view_host(); | 110 return pending_render_frame_host_->render_view_host(); |
| 111 } | 111 } |
| 112 | 112 |
| 113 RenderWidgetHostView* RenderFrameHostManager::GetRenderWidgetHostView() const { | 113 RenderWidgetHostView* RenderFrameHostManager::GetRenderWidgetHostView() const { |
| 114 if (interstitial_page_) | 114 if (interstitial_page_) |
| 115 return interstitial_page_->GetView(); | 115 return interstitial_page_->GetView(); |
| 116 if (!render_frame_host_) | 116 if (!render_frame_host_ || |
| 117 !render_frame_host_->render_view_host()->GetMainFrame()) | |
| 117 return NULL; | 118 return NULL; |
| 118 return render_frame_host_->render_view_host()->GetView(); | 119 return static_cast<RenderFrameHostImpl*>( |
| 120 render_frame_host_->render_view_host()->GetMainFrame())->GetView(); | |
|
nasko
2014/12/17 22:51:30
Why return the view of the main frame? Shouldn't t
kenrb
2015/01/05 21:15:30
Not sure why I did it that way, but your comment s
| |
| 119 } | 121 } |
| 120 | 122 |
| 121 RenderFrameProxyHost* RenderFrameHostManager::GetProxyToParent() { | 123 RenderFrameProxyHost* RenderFrameHostManager::GetProxyToParent() { |
| 122 if (frame_tree_node_->IsMainFrame()) | 124 if (frame_tree_node_->IsMainFrame()) |
| 123 return NULL; | 125 return NULL; |
| 124 | 126 |
| 125 RenderFrameProxyHostMap::iterator iter = | 127 RenderFrameProxyHostMap::iterator iter = |
| 126 proxy_hosts_.find(frame_tree_node_->parent() | 128 proxy_hosts_.find(frame_tree_node_->parent() |
| 127 ->render_manager() | 129 ->render_manager() |
| 128 ->current_frame_host() | 130 ->current_frame_host() |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 201 if (!InitRenderView(dest_render_frame_host->render_view_host(), | 203 if (!InitRenderView(dest_render_frame_host->render_view_host(), |
| 202 opener_route_id, | 204 opener_route_id, |
| 203 MSG_ROUTING_NONE, | 205 MSG_ROUTING_NONE, |
| 204 frame_tree_node_->IsMainFrame())) | 206 frame_tree_node_->IsMainFrame())) |
| 205 return NULL; | 207 return NULL; |
| 206 | 208 |
| 207 // Now that we've created a new renderer, be sure to hide it if it isn't | 209 // Now that we've created a new renderer, be sure to hide it if it isn't |
| 208 // our primary one. Otherwise, we might crash if we try to call Show() | 210 // our primary one. Otherwise, we might crash if we try to call Show() |
| 209 // on it later. | 211 // on it later. |
| 210 if (dest_render_frame_host != render_frame_host_ && | 212 if (dest_render_frame_host != render_frame_host_ && |
| 211 dest_render_frame_host->render_view_host()->GetView()) { | 213 dest_render_frame_host->GetView()) { |
| 212 dest_render_frame_host->render_view_host()->GetView()->Hide(); | 214 dest_render_frame_host->GetView()->Hide(); |
| 213 } else { | 215 } else { |
| 214 // Notify here as we won't be calling CommitPending (which does the | 216 // Notify here as we won't be calling CommitPending (which does the |
| 215 // notify). | 217 // notify). |
| 216 delegate_->NotifySwappedFromRenderManager( | 218 delegate_->NotifySwappedFromRenderManager( |
| 217 NULL, render_frame_host_.get(), frame_tree_node_->IsMainFrame()); | 219 NULL, render_frame_host_.get(), frame_tree_node_->IsMainFrame()); |
| 218 } | 220 } |
| 219 } | 221 } |
| 220 | 222 |
| 221 // If entry includes the request ID of a request that is being transferred, | 223 // If entry includes the request ID of a request that is being transferred, |
| 222 // the destination render frame will take ownership, so release ownership of | 224 // the destination render frame will take ownership, so release ownership of |
| (...skipping 802 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1025 SiteInstance* old_instance, | 1027 SiteInstance* old_instance, |
| 1026 SiteInstance* new_instance, | 1028 SiteInstance* new_instance, |
| 1027 bool is_main_frame) { | 1029 bool is_main_frame) { |
| 1028 int create_render_frame_flags = 0; | 1030 int create_render_frame_flags = 0; |
| 1029 if (is_main_frame) | 1031 if (is_main_frame) |
| 1030 create_render_frame_flags |= CREATE_RF_FOR_MAIN_FRAME_NAVIGATION; | 1032 create_render_frame_flags |= CREATE_RF_FOR_MAIN_FRAME_NAVIGATION; |
| 1031 | 1033 |
| 1032 if (delegate_->IsHidden()) | 1034 if (delegate_->IsHidden()) |
| 1033 create_render_frame_flags |= CREATE_RF_HIDDEN; | 1035 create_render_frame_flags |= CREATE_RF_HIDDEN; |
| 1034 | 1036 |
| 1035 int opener_route_id = | 1037 int opener_route_id = CreateOpenerRenderViewsIfNeeded( |
| 1036 CreateOpenerRenderViewsIfNeeded(old_instance, new_instance); | 1038 old_instance, new_instance, create_render_frame_flags); |
| 1037 | 1039 |
| 1038 if (pending_render_frame_host_) | 1040 if (pending_render_frame_host_) |
| 1039 CancelPending(); | 1041 CancelPending(); |
| 1040 | 1042 |
| 1041 // Create a non-swapped-out RFH with the given opener. | 1043 // Create a non-swapped-out RFH with the given opener. |
| 1042 pending_render_frame_host_ = | 1044 pending_render_frame_host_ = |
| 1043 CreateRenderFrame(new_instance, pending_web_ui(), opener_route_id, | 1045 CreateRenderFrame(new_instance, pending_web_ui(), opener_route_id, |
| 1044 create_render_frame_flags, nullptr); | 1046 create_render_frame_flags, nullptr); |
| 1045 } | 1047 } |
| 1046 | 1048 |
| 1047 int RenderFrameHostManager::CreateOpenerRenderViewsIfNeeded( | 1049 int RenderFrameHostManager::CreateOpenerRenderViewsIfNeeded( |
| 1048 SiteInstance* old_instance, | 1050 SiteInstance* old_instance, |
| 1049 SiteInstance* new_instance) { | 1051 SiteInstance* new_instance, |
| 1052 int& create_render_frame_flags) { | |
| 1050 int opener_route_id = MSG_ROUTING_NONE; | 1053 int opener_route_id = MSG_ROUTING_NONE; |
| 1051 if (new_instance->IsRelatedSiteInstance(old_instance)) { | 1054 if (new_instance->IsRelatedSiteInstance(old_instance)) { |
| 1052 opener_route_id = | 1055 opener_route_id = |
| 1053 delegate_->CreateOpenerRenderViewsForRenderManager(new_instance); | 1056 delegate_->CreateOpenerRenderViewsForRenderManager(new_instance); |
| 1054 if (CommandLine::ForCurrentProcess()->HasSwitch( | 1057 if (CommandLine::ForCurrentProcess()->HasSwitch( |
| 1055 switches::kSitePerProcess)) { | 1058 switches::kSitePerProcess)) { |
| 1056 // Ensure that the frame tree has RenderFrameProxyHosts for the new | 1059 // Ensure that the frame tree has RenderFrameProxyHosts for the new |
| 1057 // SiteInstance in all nodes except the current one. | 1060 // SiteInstance in all nodes except the current one. |
| 1058 frame_tree_node_->frame_tree()->CreateProxiesForSiteInstance( | 1061 frame_tree_node_->frame_tree()->CreateProxiesForSiteInstance( |
| 1059 frame_tree_node_, new_instance); | 1062 frame_tree_node_, new_instance); |
| 1063 // RenderFrames in different processes from their parent RenderFrames | |
| 1064 // in the frame tree require RenderWidgets for rendering and processing | |
| 1065 // input events. | |
| 1066 if (frame_tree_node_->parent() && | |
| 1067 frame_tree_node_->parent() | |
| 1068 ->render_manager() | |
| 1069 ->current_frame_host() | |
| 1070 ->GetSiteInstance() != new_instance) | |
| 1071 create_render_frame_flags |= CREATE_RF_NEEDS_RENDER_WIDGET_HOST; | |
| 1060 } | 1072 } |
| 1061 } | 1073 } |
| 1062 return opener_route_id; | 1074 return opener_route_id; |
| 1063 } | 1075 } |
| 1064 | 1076 |
| 1065 scoped_ptr<RenderFrameHostImpl> RenderFrameHostManager::CreateRenderFrameHost( | 1077 scoped_ptr<RenderFrameHostImpl> RenderFrameHostManager::CreateRenderFrameHost( |
| 1066 SiteInstance* site_instance, | 1078 SiteInstance* site_instance, |
| 1067 int view_routing_id, | 1079 int view_routing_id, |
| 1068 int frame_routing_id, | 1080 int frame_routing_id, |
| 1069 int flags) { | 1081 int flags) { |
| 1070 if (frame_routing_id == MSG_ROUTING_NONE) | 1082 if (frame_routing_id == MSG_ROUTING_NONE) |
| 1071 frame_routing_id = site_instance->GetProcess()->GetNextRoutingID(); | 1083 frame_routing_id = site_instance->GetProcess()->GetNextRoutingID(); |
| 1072 | 1084 |
| 1073 bool swapped_out = !!(flags & CREATE_RF_SWAPPED_OUT); | 1085 bool swapped_out = flags & CREATE_RF_SWAPPED_OUT; |
|
nasko
2014/12/17 22:51:30
Why remove it on one line and not the other?
kenrb
2015/01/05 21:15:30
Merge issue, it wasn't supposed to be removed. Fix
| |
| 1074 bool hidden = !!(flags & CREATE_RF_HIDDEN); | 1086 bool hidden = !!(flags & CREATE_RF_HIDDEN); |
| 1075 | 1087 |
| 1076 // Create a RVH for main frames, or find the existing one for subframes. | 1088 // Create a RVH for main frames, or find the existing one for subframes. |
| 1077 FrameTree* frame_tree = frame_tree_node_->frame_tree(); | 1089 FrameTree* frame_tree = frame_tree_node_->frame_tree(); |
| 1078 RenderViewHostImpl* render_view_host = NULL; | 1090 RenderViewHostImpl* render_view_host = NULL; |
| 1079 if (frame_tree_node_->IsMainFrame()) { | 1091 if (frame_tree_node_->IsMainFrame()) { |
| 1080 render_view_host = frame_tree->CreateRenderViewHost( | 1092 render_view_host = frame_tree->CreateRenderViewHost( |
| 1081 site_instance, view_routing_id, frame_routing_id, swapped_out, hidden); | 1093 site_instance, view_routing_id, frame_routing_id, swapped_out, hidden); |
| 1082 } else { | 1094 } else { |
| 1083 render_view_host = frame_tree->GetRenderViewHost(site_instance); | 1095 render_view_host = frame_tree->GetRenderViewHost(site_instance); |
| 1084 | 1096 |
| 1085 CHECK(render_view_host); | 1097 CHECK(render_view_host); |
| 1086 } | 1098 } |
| 1087 | 1099 |
| 1088 // TODO(creis): Pass hidden to RFH. | 1100 // TODO(creis): Pass hidden to RFH. |
| 1089 scoped_ptr<RenderFrameHostImpl> render_frame_host = | 1101 scoped_ptr<RenderFrameHostImpl> render_frame_host = make_scoped_ptr( |
| 1090 make_scoped_ptr(RenderFrameHostFactory::Create( | 1102 RenderFrameHostFactory::Create( |
| 1091 render_view_host, render_frame_delegate_, frame_tree, | 1103 render_view_host, render_frame_delegate_, render_widget_delegate_, |
| 1092 frame_tree_node_, frame_routing_id, flags).release()); | 1104 frame_tree, frame_tree_node_, frame_routing_id, flags).release()); |
| 1093 return render_frame_host.Pass(); | 1105 return render_frame_host.Pass(); |
| 1094 } | 1106 } |
| 1095 | 1107 |
| 1096 scoped_ptr<RenderFrameHostImpl> RenderFrameHostManager::CreateRenderFrame( | 1108 scoped_ptr<RenderFrameHostImpl> RenderFrameHostManager::CreateRenderFrame( |
| 1097 SiteInstance* instance, | 1109 SiteInstance* instance, |
| 1098 WebUIImpl* web_ui, | 1110 WebUIImpl* web_ui, |
| 1099 int opener_route_id, | 1111 int opener_route_id, |
| 1100 int flags, | 1112 int flags, |
| 1101 int* view_routing_id_ptr) { | 1113 int* view_routing_id_ptr) { |
| 1102 bool swapped_out = !!(flags & CREATE_RF_SWAPPED_OUT); | 1114 bool swapped_out = !!(flags & CREATE_RF_SWAPPED_OUT); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1169 if (frame_tree_node_->IsMainFrame()) | 1181 if (frame_tree_node_->IsMainFrame()) |
| 1170 proxy->TakeFrameHostOwnership(new_render_frame_host.Pass()); | 1182 proxy->TakeFrameHostOwnership(new_render_frame_host.Pass()); |
| 1171 } | 1183 } |
| 1172 | 1184 |
| 1173 success = | 1185 success = |
| 1174 InitRenderView(render_view_host, opener_route_id, proxy_routing_id, | 1186 InitRenderView(render_view_host, opener_route_id, proxy_routing_id, |
| 1175 !!(flags & CREATE_RF_FOR_MAIN_FRAME_NAVIGATION)); | 1187 !!(flags & CREATE_RF_FOR_MAIN_FRAME_NAVIGATION)); |
| 1176 if (success) { | 1188 if (success) { |
| 1177 if (frame_tree_node_->IsMainFrame()) { | 1189 if (frame_tree_node_->IsMainFrame()) { |
| 1178 // Don't show the main frame's view until we get a DidNavigate from it. | 1190 // Don't show the main frame's view until we get a DidNavigate from it. |
| 1179 render_view_host->GetView()->Hide(); | 1191 // Only top-level RenderViewHosts have RenderWidgetHostViews; |
| 1192 // RenderWidgetHosts for out-of-process iframes will be created | |
| 1193 // later and hidden. | |
| 1194 if (render_view_host->GetView()) | |
| 1195 render_view_host->GetView()->Hide(); | |
| 1180 } else if (!swapped_out) { | 1196 } else if (!swapped_out) { |
| 1181 // Init the RFH, so a RenderFrame is created in the renderer. | 1197 // Init the RFH, so a RenderFrame is created in the renderer. |
| 1182 DCHECK(new_render_frame_host.get()); | 1198 DCHECK(new_render_frame_host.get()); |
| 1183 success = InitRenderFrame(new_render_frame_host.get()); | 1199 success = InitRenderFrame(new_render_frame_host.get()); |
| 1184 } | 1200 } |
| 1185 if (success) { | 1201 if (success) { |
| 1186 if (view_routing_id_ptr) | 1202 if (view_routing_id_ptr) |
| 1187 *view_routing_id_ptr = render_view_host->GetRoutingID(); | 1203 *view_routing_id_ptr = render_view_host->GetRoutingID(); |
| 1188 // If a brand new RFH was created, announce it to observers. | 1204 // If a brand new RFH was created, announce it to observers. |
| 1189 if (new_render_frame_host) { | 1205 if (new_render_frame_host) { |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1317 // committing above and we're done. | 1333 // committing above and we're done. |
| 1318 if (!pending_render_frame_host_) { | 1334 if (!pending_render_frame_host_) { |
| 1319 if (will_focus_location_bar) | 1335 if (will_focus_location_bar) |
| 1320 delegate_->SetFocusToLocationBar(false); | 1336 delegate_->SetFocusToLocationBar(false); |
| 1321 return; | 1337 return; |
| 1322 } | 1338 } |
| 1323 | 1339 |
| 1324 // Remember if the page was focused so we can focus the new renderer in | 1340 // Remember if the page was focused so we can focus the new renderer in |
| 1325 // that case. | 1341 // that case. |
| 1326 bool focus_render_view = !will_focus_location_bar && | 1342 bool focus_render_view = !will_focus_location_bar && |
| 1327 render_frame_host_->render_view_host()->GetView() && | 1343 render_frame_host_->GetView() && |
| 1328 render_frame_host_->render_view_host()->GetView()->HasFocus(); | 1344 render_frame_host_->GetView()->HasFocus(); |
| 1329 | 1345 |
| 1330 bool is_main_frame = frame_tree_node_->IsMainFrame(); | 1346 bool is_main_frame = frame_tree_node_->IsMainFrame(); |
| 1331 | 1347 |
| 1332 // Swap in the pending frame and make it active. Also ensure the FrameTree | 1348 // Swap in the pending frame and make it active. Also ensure the FrameTree |
| 1333 // stays in sync. | 1349 // stays in sync. |
| 1334 scoped_ptr<RenderFrameHostImpl> old_render_frame_host = | 1350 scoped_ptr<RenderFrameHostImpl> old_render_frame_host = |
| 1335 SetRenderFrameHost(pending_render_frame_host_.Pass()); | 1351 SetRenderFrameHost(pending_render_frame_host_.Pass()); |
| 1336 if (is_main_frame) | 1352 if (is_main_frame) |
| 1337 render_frame_host_->render_view_host()->AttachToFrameTree(); | 1353 render_frame_host_->render_view_host()->AttachToFrameTree(); |
| 1338 | 1354 |
| 1339 // The process will no longer try to exit, so we can decrement the count. | 1355 // The process will no longer try to exit, so we can decrement the count. |
| 1340 render_frame_host_->GetProcess()->RemovePendingView(); | 1356 render_frame_host_->GetProcess()->RemovePendingView(); |
| 1341 | 1357 |
| 1342 // Show the new view (or a sad tab) if necessary. | 1358 // Show the new view (or a sad tab) if necessary. |
| 1343 bool new_rfh_has_view = !!render_frame_host_->render_view_host()->GetView(); | 1359 bool new_rfh_has_view = !!render_frame_host_->GetView(); |
| 1344 if (!delegate_->IsHidden() && new_rfh_has_view) { | 1360 if (!delegate_->IsHidden() && new_rfh_has_view) { |
| 1345 // In most cases, we need to show the new view. | 1361 // In most cases, we need to show the new view. |
| 1346 render_frame_host_->render_view_host()->GetView()->Show(); | 1362 render_frame_host_->GetView()->Show(); |
| 1347 } | 1363 } |
| 1348 if (!new_rfh_has_view) { | 1364 if (!new_rfh_has_view) { |
| 1349 // If the view is gone, then this RenderViewHost died while it was hidden. | 1365 // If the view is gone, then this RenderViewHost died while it was hidden. |
| 1350 // We ignored the RenderProcessGone call at the time, so we should send it | 1366 // We ignored the RenderProcessGone call at the time, so we should send it |
| 1351 // now to make sure the sad tab shows up, etc. | 1367 // now to make sure the sad tab shows up, etc. |
| 1352 DCHECK(!render_frame_host_->IsRenderFrameLive()); | 1368 DCHECK(!render_frame_host_->IsRenderFrameLive()); |
| 1353 DCHECK(!render_frame_host_->render_view_host()->IsRenderViewLive()); | 1369 DCHECK(!render_frame_host_->render_view_host()->IsRenderViewLive()); |
| 1354 delegate_->RenderProcessGoneFromRenderManager( | 1370 delegate_->RenderProcessGoneFromRenderManager( |
| 1355 render_frame_host_->render_view_host()); | 1371 render_frame_host_->render_view_host()); |
| 1356 } | 1372 } |
| 1357 | 1373 |
| 1358 // For top-level frames, also hide the old RenderViewHost's view. | 1374 // For top-level frames, also hide the old RenderViewHost's view. |
| 1359 // TODO(creis): As long as show/hide are on RVH, we don't want to hide on | 1375 // TODO(creis): As long as show/hide are on RVH, we don't want to hide on |
| 1360 // subframe navigations or we will interfere with the top-level frame. | 1376 // subframe navigations or we will interfere with the top-level frame. |
| 1361 if (is_main_frame && old_render_frame_host->render_view_host()->GetView()) | 1377 if (is_main_frame && old_render_frame_host->render_view_host()->GetView()) |
| 1362 old_render_frame_host->render_view_host()->GetView()->Hide(); | 1378 old_render_frame_host->render_view_host()->GetView()->Hide(); |
| 1363 | 1379 |
| 1364 // Make sure the size is up to date. (Fix for bug 1079768.) | 1380 // Make sure the size is up to date. (Fix for bug 1079768.) |
| 1365 delegate_->UpdateRenderViewSizeForRenderManager(); | 1381 delegate_->UpdateRenderViewSizeForRenderManager(); |
| 1366 | 1382 |
| 1367 if (will_focus_location_bar) { | 1383 if (will_focus_location_bar) { |
| 1368 delegate_->SetFocusToLocationBar(false); | 1384 delegate_->SetFocusToLocationBar(false); |
| 1369 } else if (focus_render_view && | 1385 } else if (focus_render_view && render_frame_host_->GetView()) { |
| 1370 render_frame_host_->render_view_host()->GetView()) { | 1386 render_frame_host_->GetView()->Focus(); |
| 1371 render_frame_host_->render_view_host()->GetView()->Focus(); | |
| 1372 } | 1387 } |
| 1373 | 1388 |
| 1374 // Notify that we've swapped RenderFrameHosts. We do this before shutting down | 1389 // Notify that we've swapped RenderFrameHosts. We do this before shutting down |
| 1375 // the RFH so that we can clean up RendererResources related to the RFH first. | 1390 // the RFH so that we can clean up RendererResources related to the RFH first. |
| 1376 delegate_->NotifySwappedFromRenderManager( | 1391 delegate_->NotifySwappedFromRenderManager( |
| 1377 old_render_frame_host.get(), render_frame_host_.get(), is_main_frame); | 1392 old_render_frame_host.get(), render_frame_host_.get(), is_main_frame); |
| 1378 | 1393 |
| 1379 // Swap out the old frame now that the new one is visible. | 1394 // Swap out the old frame now that the new one is visible. |
| 1380 // This will swap it out and then put it on the proxy list (if there are other | 1395 // This will swap it out and then put it on the proxy list (if there are other |
| 1381 // active views in its SiteInstance) or schedule it for deletion when the swap | 1396 // active views in its SiteInstance) or schedule it for deletion when the swap |
| 1382 // out ack arrives (or immediately if the process isn't live). | 1397 // out ack arrives (or immediately if the process isn't live). |
| 1383 // In the --site-per-process case, old subframe RHFs are not kept alive inside | 1398 // In the --site-per-process case, old subframe RHFs are not kept alive inside |
| 1384 // the proxy. | 1399 // the proxy. |
| 1385 SwapOutOldFrame(old_render_frame_host.Pass()); | 1400 SwapOutOldFrame(old_render_frame_host.Pass()); |
| 1386 | 1401 |
| 1387 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kSitePerProcess) && | 1402 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kSitePerProcess) && |
| 1388 !is_main_frame) { | 1403 !is_main_frame) { |
| 1389 // If this is a subframe, it should have a CrossProcessFrameConnector | 1404 // If this is a subframe, it should have a CrossProcessFrameConnector |
| 1390 // created already. Use it to link the new RFH's view to the proxy that | 1405 // created already. Use it to link the new RFH's view to the proxy that |
| 1391 // belongs to the parent frame's SiteInstance. | 1406 // belongs to the parent frame's SiteInstance. |
| 1392 // Note: We do this after swapping out the old RFH because that may create | 1407 // Note: We do this after swapping out the old RFH because that may create |
| 1393 // the proxy we're looking for. | 1408 // the proxy we're looking for. |
| 1394 RenderFrameProxyHost* proxy_to_parent = GetProxyToParent(); | 1409 RenderFrameProxyHost* proxy_to_parent = GetProxyToParent(); |
| 1395 if (proxy_to_parent) { | 1410 if (proxy_to_parent) { |
| 1396 proxy_to_parent->SetChildRWHView( | 1411 proxy_to_parent->SetChildRWHView(render_frame_host_->GetView()); |
| 1397 render_frame_host_->render_view_host()->GetView()); | |
| 1398 } | 1412 } |
| 1399 | 1413 |
| 1400 // Since the new RenderFrameHost is now committed, there must be no proxies | 1414 // Since the new RenderFrameHost is now committed, there must be no proxies |
| 1401 // for its SiteInstance. Delete any existing ones. | 1415 // for its SiteInstance. Delete any existing ones. |
| 1402 RenderFrameProxyHostMap::iterator iter = | 1416 RenderFrameProxyHostMap::iterator iter = |
| 1403 proxy_hosts_.find(render_frame_host_->GetSiteInstance()->GetId()); | 1417 proxy_hosts_.find(render_frame_host_->GetSiteInstance()->GetId()); |
| 1404 if (iter != proxy_hosts_.end()) { | 1418 if (iter != proxy_hosts_.end()) { |
| 1405 delete iter->second; | 1419 delete iter->second; |
| 1406 proxy_hosts_.erase(iter); | 1420 proxy_hosts_.erase(iter); |
| 1407 } | 1421 } |
| (...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1679 void RenderFrameHostManager::DeleteRenderFrameProxyHost( | 1693 void RenderFrameHostManager::DeleteRenderFrameProxyHost( |
| 1680 SiteInstance* instance) { | 1694 SiteInstance* instance) { |
| 1681 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId()); | 1695 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId()); |
| 1682 if (iter != proxy_hosts_.end()) { | 1696 if (iter != proxy_hosts_.end()) { |
| 1683 delete iter->second; | 1697 delete iter->second; |
| 1684 proxy_hosts_.erase(iter); | 1698 proxy_hosts_.erase(iter); |
| 1685 } | 1699 } |
| 1686 } | 1700 } |
| 1687 | 1701 |
| 1688 } // namespace content | 1702 } // namespace content |
| OLD | NEW |