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 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 | 121 |
122 RenderViewHostImpl* RenderFrameHostManager::pending_render_view_host() const { | 122 RenderViewHostImpl* RenderFrameHostManager::pending_render_view_host() const { |
123 if (!pending_render_frame_host_) | 123 if (!pending_render_frame_host_) |
124 return NULL; | 124 return NULL; |
125 return pending_render_frame_host_->render_view_host(); | 125 return pending_render_frame_host_->render_view_host(); |
126 } | 126 } |
127 | 127 |
128 RenderWidgetHostView* RenderFrameHostManager::GetRenderWidgetHostView() const { | 128 RenderWidgetHostView* RenderFrameHostManager::GetRenderWidgetHostView() const { |
129 if (interstitial_page_) | 129 if (interstitial_page_) |
130 return interstitial_page_->GetView(); | 130 return interstitial_page_->GetView(); |
131 if (render_frame_host_) | 131 if (!render_frame_host_) |
132 return render_frame_host_->GetView(); | 132 return NULL; |
133 return nullptr; | 133 return render_frame_host_->render_view_host()->GetView(); |
134 } | 134 } |
135 | 135 |
136 RenderFrameProxyHost* RenderFrameHostManager::GetProxyToParent() { | 136 RenderFrameProxyHost* RenderFrameHostManager::GetProxyToParent() { |
137 if (frame_tree_node_->IsMainFrame()) | 137 if (frame_tree_node_->IsMainFrame()) |
138 return NULL; | 138 return NULL; |
139 | 139 |
140 RenderFrameProxyHostMap::iterator iter = | 140 RenderFrameProxyHostMap::iterator iter = |
141 proxy_hosts_.find(frame_tree_node_->parent() | 141 proxy_hosts_.find(frame_tree_node_->parent() |
142 ->render_manager() | 142 ->render_manager() |
143 ->current_frame_host() | 143 ->current_frame_host() |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
214 if (!InitRenderView(dest_render_frame_host->render_view_host(), | 214 if (!InitRenderView(dest_render_frame_host->render_view_host(), |
215 opener_route_id, | 215 opener_route_id, |
216 MSG_ROUTING_NONE, | 216 MSG_ROUTING_NONE, |
217 frame_tree_node_->IsMainFrame())) | 217 frame_tree_node_->IsMainFrame())) |
218 return NULL; | 218 return NULL; |
219 | 219 |
220 // Now that we've created a new renderer, be sure to hide it if it isn't | 220 // Now that we've created a new renderer, be sure to hide it if it isn't |
221 // our primary one. Otherwise, we might crash if we try to call Show() | 221 // our primary one. Otherwise, we might crash if we try to call Show() |
222 // on it later. | 222 // on it later. |
223 if (dest_render_frame_host != render_frame_host_ && | 223 if (dest_render_frame_host != render_frame_host_ && |
224 dest_render_frame_host->GetView()) { | 224 dest_render_frame_host->render_view_host()->GetView()) { |
225 dest_render_frame_host->GetView()->Hide(); | 225 dest_render_frame_host->render_view_host()->GetView()->Hide(); |
226 } else { | 226 } else { |
227 // Notify here as we won't be calling CommitPending (which does the | 227 // Notify here as we won't be calling CommitPending (which does the |
228 // notify). | 228 // notify). |
229 delegate_->NotifySwappedFromRenderManager( | 229 delegate_->NotifySwappedFromRenderManager( |
230 NULL, render_frame_host_.get(), frame_tree_node_->IsMainFrame()); | 230 NULL, render_frame_host_.get(), frame_tree_node_->IsMainFrame()); |
231 } | 231 } |
232 } | 232 } |
233 | 233 |
234 // If entry includes the request ID of a request that is being transferred, | 234 // If entry includes the request ID of a request that is being transferred, |
235 // the destination render frame will take ownership, so release ownership of | 235 // the destination render frame will take ownership, so release ownership of |
(...skipping 911 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1147 SiteInstance* old_instance, | 1147 SiteInstance* old_instance, |
1148 SiteInstance* new_instance, | 1148 SiteInstance* new_instance, |
1149 bool is_main_frame) { | 1149 bool is_main_frame) { |
1150 int create_render_frame_flags = 0; | 1150 int create_render_frame_flags = 0; |
1151 if (is_main_frame) | 1151 if (is_main_frame) |
1152 create_render_frame_flags |= CREATE_RF_FOR_MAIN_FRAME_NAVIGATION; | 1152 create_render_frame_flags |= CREATE_RF_FOR_MAIN_FRAME_NAVIGATION; |
1153 | 1153 |
1154 if (delegate_->IsHidden()) | 1154 if (delegate_->IsHidden()) |
1155 create_render_frame_flags |= CREATE_RF_HIDDEN; | 1155 create_render_frame_flags |= CREATE_RF_HIDDEN; |
1156 | 1156 |
1157 int opener_route_id = CreateOpenerRenderViewsIfNeeded( | 1157 int opener_route_id = |
1158 old_instance, new_instance, &create_render_frame_flags); | 1158 CreateOpenerRenderViewsIfNeeded(old_instance, new_instance); |
1159 | 1159 |
1160 if (pending_render_frame_host_) | 1160 if (pending_render_frame_host_) |
1161 CancelPending(); | 1161 CancelPending(); |
1162 | 1162 |
1163 // Create a non-swapped-out RFH with the given opener. | 1163 // Create a non-swapped-out RFH with the given opener. |
1164 pending_render_frame_host_ = | 1164 pending_render_frame_host_ = |
1165 CreateRenderFrame(new_instance, pending_web_ui(), opener_route_id, | 1165 CreateRenderFrame(new_instance, pending_web_ui(), opener_route_id, |
1166 create_render_frame_flags, nullptr); | 1166 create_render_frame_flags, nullptr); |
1167 } | 1167 } |
1168 | 1168 |
1169 int RenderFrameHostManager::CreateOpenerRenderViewsIfNeeded( | 1169 int RenderFrameHostManager::CreateOpenerRenderViewsIfNeeded( |
1170 SiteInstance* old_instance, | 1170 SiteInstance* old_instance, |
1171 SiteInstance* new_instance, | 1171 SiteInstance* new_instance) { |
1172 int* create_render_frame_flags) { | |
1173 int opener_route_id = MSG_ROUTING_NONE; | 1172 int opener_route_id = MSG_ROUTING_NONE; |
1174 if (new_instance->IsRelatedSiteInstance(old_instance)) { | 1173 if (new_instance->IsRelatedSiteInstance(old_instance)) { |
1175 opener_route_id = | 1174 opener_route_id = |
1176 delegate_->CreateOpenerRenderViewsForRenderManager(new_instance); | 1175 delegate_->CreateOpenerRenderViewsForRenderManager(new_instance); |
1177 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1176 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
1178 switches::kSitePerProcess)) { | 1177 switches::kSitePerProcess)) { |
1179 // Ensure that the frame tree has RenderFrameProxyHosts for the new | 1178 // Ensure that the frame tree has RenderFrameProxyHosts for the new |
1180 // SiteInstance in all nodes except the current one. | 1179 // SiteInstance in all nodes except the current one. |
1181 frame_tree_node_->frame_tree()->CreateProxiesForSiteInstance( | 1180 frame_tree_node_->frame_tree()->CreateProxiesForSiteInstance( |
1182 frame_tree_node_, new_instance); | 1181 frame_tree_node_, new_instance); |
1183 // RenderFrames in different processes from their parent RenderFrames | |
1184 // in the frame tree require RenderWidgets for rendering and processing | |
1185 // input events. | |
1186 if (frame_tree_node_->parent() && | |
1187 frame_tree_node_->parent()->current_frame_host()->GetSiteInstance() != | |
1188 new_instance) | |
1189 *create_render_frame_flags |= CREATE_RF_NEEDS_RENDER_WIDGET_HOST; | |
1190 } | 1182 } |
1191 } | 1183 } |
1192 return opener_route_id; | 1184 return opener_route_id; |
1193 } | 1185 } |
1194 | 1186 |
1195 scoped_ptr<RenderFrameHostImpl> RenderFrameHostManager::CreateRenderFrameHost( | 1187 scoped_ptr<RenderFrameHostImpl> RenderFrameHostManager::CreateRenderFrameHost( |
1196 SiteInstance* site_instance, | 1188 SiteInstance* site_instance, |
1197 int view_routing_id, | 1189 int view_routing_id, |
1198 int frame_routing_id, | 1190 int frame_routing_id, |
1199 int flags) { | 1191 int flags) { |
1200 if (frame_routing_id == MSG_ROUTING_NONE) | 1192 if (frame_routing_id == MSG_ROUTING_NONE) |
1201 frame_routing_id = site_instance->GetProcess()->GetNextRoutingID(); | 1193 frame_routing_id = site_instance->GetProcess()->GetNextRoutingID(); |
1202 | 1194 |
1203 bool swapped_out = !!(flags & CREATE_RF_SWAPPED_OUT); | 1195 bool swapped_out = !!(flags & CREATE_RF_SWAPPED_OUT); |
1204 bool hidden = !!(flags & CREATE_RF_HIDDEN); | 1196 bool hidden = !!(flags & CREATE_RF_HIDDEN); |
1205 | 1197 |
1206 // Create a RVH for main frames, or find the existing one for subframes. | 1198 // Create a RVH for main frames, or find the existing one for subframes. |
1207 FrameTree* frame_tree = frame_tree_node_->frame_tree(); | 1199 FrameTree* frame_tree = frame_tree_node_->frame_tree(); |
1208 RenderViewHostImpl* render_view_host = nullptr; | 1200 RenderViewHostImpl* render_view_host = nullptr; |
1209 if (frame_tree_node_->IsMainFrame()) { | 1201 if (frame_tree_node_->IsMainFrame()) { |
1210 render_view_host = frame_tree->CreateRenderViewHost( | 1202 render_view_host = frame_tree->CreateRenderViewHost( |
1211 site_instance, view_routing_id, frame_routing_id, swapped_out, hidden); | 1203 site_instance, view_routing_id, frame_routing_id, swapped_out, hidden); |
1212 } else { | 1204 } else { |
1213 render_view_host = frame_tree->GetRenderViewHost(site_instance); | 1205 render_view_host = frame_tree->GetRenderViewHost(site_instance); |
1214 | 1206 |
1215 CHECK(render_view_host); | 1207 CHECK(render_view_host); |
1216 } | 1208 } |
1217 | 1209 |
1218 // TODO(creis): Pass hidden to RFH. | 1210 // TODO(creis): Pass hidden to RFH. |
1219 scoped_ptr<RenderFrameHostImpl> render_frame_host = make_scoped_ptr( | 1211 scoped_ptr<RenderFrameHostImpl> render_frame_host = |
1220 RenderFrameHostFactory::Create( | 1212 make_scoped_ptr(RenderFrameHostFactory::Create( |
1221 render_view_host, render_frame_delegate_, render_widget_delegate_, | 1213 render_view_host, render_frame_delegate_, frame_tree, |
1222 frame_tree, frame_tree_node_, frame_routing_id, flags).release()); | 1214 frame_tree_node_, frame_routing_id, flags).release()); |
1223 return render_frame_host.Pass(); | 1215 return render_frame_host.Pass(); |
1224 } | 1216 } |
1225 | 1217 |
1226 // PlzNavigate | 1218 // PlzNavigate |
1227 bool RenderFrameHostManager::CreateSpeculativeRenderFrameHost( | 1219 bool RenderFrameHostManager::CreateSpeculativeRenderFrameHost( |
1228 const GURL& url, | 1220 const GURL& url, |
1229 SiteInstance* old_instance, | 1221 SiteInstance* old_instance, |
1230 SiteInstance* new_instance, | 1222 SiteInstance* new_instance, |
1231 int bindings) { | 1223 int bindings) { |
1232 CHECK(new_instance); | 1224 CHECK(new_instance); |
1233 CHECK_NE(old_instance, new_instance); | 1225 CHECK_NE(old_instance, new_instance); |
1234 | 1226 |
1235 const NavigationEntry* current_navigation_entry = | 1227 const NavigationEntry* current_navigation_entry = |
1236 delegate_->GetLastCommittedNavigationEntryForRenderManager(); | 1228 delegate_->GetLastCommittedNavigationEntryForRenderManager(); |
1237 scoped_ptr<WebUIImpl> new_web_ui; | 1229 scoped_ptr<WebUIImpl> new_web_ui; |
1238 bool should_reuse_web_ui = ShouldReuseWebUI(current_navigation_entry, url); | 1230 bool should_reuse_web_ui = ShouldReuseWebUI(current_navigation_entry, url); |
1239 if (!should_reuse_web_ui) | 1231 if (!should_reuse_web_ui) |
1240 new_web_ui = CreateWebUI(url, bindings); | 1232 new_web_ui = CreateWebUI(url, bindings); |
1241 | 1233 |
| 1234 int opener_route_id = |
| 1235 CreateOpenerRenderViewsIfNeeded(old_instance, new_instance); |
| 1236 |
1242 int create_render_frame_flags = 0; | 1237 int create_render_frame_flags = 0; |
1243 int opener_route_id = | |
1244 CreateOpenerRenderViewsIfNeeded(old_instance, new_instance, | |
1245 &create_render_frame_flags); | |
1246 | |
1247 if (frame_tree_node_->IsMainFrame()) | 1238 if (frame_tree_node_->IsMainFrame()) |
1248 create_render_frame_flags |= CREATE_RF_FOR_MAIN_FRAME_NAVIGATION; | 1239 create_render_frame_flags |= CREATE_RF_FOR_MAIN_FRAME_NAVIGATION; |
1249 if (delegate_->IsHidden()) | 1240 if (delegate_->IsHidden()) |
1250 create_render_frame_flags |= CREATE_RF_HIDDEN; | 1241 create_render_frame_flags |= CREATE_RF_HIDDEN; |
1251 scoped_ptr<RenderFrameHostImpl> new_render_frame_host = | 1242 scoped_ptr<RenderFrameHostImpl> new_render_frame_host = |
1252 CreateRenderFrame(new_instance, new_web_ui.get(), opener_route_id, | 1243 CreateRenderFrame(new_instance, new_web_ui.get(), opener_route_id, |
1253 create_render_frame_flags, nullptr); | 1244 create_render_frame_flags, nullptr); |
1254 | 1245 |
1255 if (!new_render_frame_host) | 1246 if (!new_render_frame_host) |
1256 return false; | 1247 return false; |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1335 proxy_routing_id = proxy->GetRoutingID(); | 1326 proxy_routing_id = proxy->GetRoutingID(); |
1336 proxy->TakeFrameHostOwnership(new_render_frame_host.Pass()); | 1327 proxy->TakeFrameHostOwnership(new_render_frame_host.Pass()); |
1337 } | 1328 } |
1338 | 1329 |
1339 success = | 1330 success = |
1340 InitRenderView(render_view_host, opener_route_id, proxy_routing_id, | 1331 InitRenderView(render_view_host, opener_route_id, proxy_routing_id, |
1341 !!(flags & CREATE_RF_FOR_MAIN_FRAME_NAVIGATION)); | 1332 !!(flags & CREATE_RF_FOR_MAIN_FRAME_NAVIGATION)); |
1342 if (success) { | 1333 if (success) { |
1343 if (frame_tree_node_->IsMainFrame()) { | 1334 if (frame_tree_node_->IsMainFrame()) { |
1344 // Don't show the main frame's view until we get a DidNavigate from it. | 1335 // Don't show the main frame's view until we get a DidNavigate from it. |
1345 // Only the RenderViewHost for the top-level RenderFrameHost has a | 1336 render_view_host->GetView()->Hide(); |
1346 // RenderWidgetHostView; RenderWidgetHosts for out-of-process iframes | |
1347 // will be created later and hidden. | |
1348 if (render_view_host->GetView()) | |
1349 render_view_host->GetView()->Hide(); | |
1350 } else if (!swapped_out) { | 1337 } else if (!swapped_out) { |
1351 // Init the RFH, so a RenderFrame is created in the renderer. | 1338 // Init the RFH, so a RenderFrame is created in the renderer. |
1352 DCHECK(new_render_frame_host.get()); | 1339 DCHECK(new_render_frame_host.get()); |
1353 success = InitRenderFrame(new_render_frame_host.get()); | 1340 success = InitRenderFrame(new_render_frame_host.get()); |
1354 } | 1341 } |
1355 } | 1342 } |
1356 | 1343 |
1357 if (success) { | 1344 if (success) { |
1358 if (view_routing_id_ptr) | 1345 if (view_routing_id_ptr) |
1359 *view_routing_id_ptr = render_view_host->GetRoutingID(); | 1346 *view_routing_id_ptr = render_view_host->GetRoutingID(); |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1509 // UI committing above and we're done. | 1496 // UI committing above and we're done. |
1510 if (!pending_render_frame_host_ && !speculative_render_frame_host_) { | 1497 if (!pending_render_frame_host_ && !speculative_render_frame_host_) { |
1511 if (will_focus_location_bar) | 1498 if (will_focus_location_bar) |
1512 delegate_->SetFocusToLocationBar(false); | 1499 delegate_->SetFocusToLocationBar(false); |
1513 return; | 1500 return; |
1514 } | 1501 } |
1515 | 1502 |
1516 // Remember if the page was focused so we can focus the new renderer in | 1503 // Remember if the page was focused so we can focus the new renderer in |
1517 // that case. | 1504 // that case. |
1518 bool focus_render_view = !will_focus_location_bar && | 1505 bool focus_render_view = !will_focus_location_bar && |
1519 render_frame_host_->GetView() && | 1506 render_frame_host_->render_view_host()->GetView() && |
1520 render_frame_host_->GetView()->HasFocus(); | 1507 render_frame_host_->render_view_host()->GetView()->HasFocus(); |
1521 | 1508 |
1522 bool is_main_frame = frame_tree_node_->IsMainFrame(); | 1509 bool is_main_frame = frame_tree_node_->IsMainFrame(); |
1523 | 1510 |
1524 // Swap in the pending or speculative frame and make it active. Also ensure | 1511 // Swap in the pending or speculative frame and make it active. Also ensure |
1525 // the FrameTree stays in sync. | 1512 // the FrameTree stays in sync. |
1526 scoped_ptr<RenderFrameHostImpl> old_render_frame_host; | 1513 scoped_ptr<RenderFrameHostImpl> old_render_frame_host; |
1527 if (!browser_side_navigation) { | 1514 if (!browser_side_navigation) { |
1528 DCHECK(!speculative_render_frame_host_); | 1515 DCHECK(!speculative_render_frame_host_); |
1529 old_render_frame_host = | 1516 old_render_frame_host = |
1530 SetRenderFrameHost(pending_render_frame_host_.Pass()); | 1517 SetRenderFrameHost(pending_render_frame_host_.Pass()); |
1531 } else { | 1518 } else { |
1532 // PlzNavigate | 1519 // PlzNavigate |
1533 DCHECK(speculative_render_frame_host_); | 1520 DCHECK(speculative_render_frame_host_); |
1534 old_render_frame_host = | 1521 old_render_frame_host = |
1535 SetRenderFrameHost(speculative_render_frame_host_.Pass()); | 1522 SetRenderFrameHost(speculative_render_frame_host_.Pass()); |
1536 } | 1523 } |
1537 | 1524 |
1538 if (is_main_frame) | 1525 if (is_main_frame) |
1539 render_frame_host_->render_view_host()->AttachToFrameTree(); | 1526 render_frame_host_->render_view_host()->AttachToFrameTree(); |
1540 | 1527 |
1541 // The process will no longer try to exit, so we can decrement the count. | 1528 // The process will no longer try to exit, so we can decrement the count. |
1542 render_frame_host_->GetProcess()->RemovePendingView(); | 1529 render_frame_host_->GetProcess()->RemovePendingView(); |
1543 | 1530 |
1544 // Show the new view (or a sad tab) if necessary. | 1531 // Show the new view (or a sad tab) if necessary. |
1545 bool new_rfh_has_view = !!render_frame_host_->GetView(); | 1532 bool new_rfh_has_view = !!render_frame_host_->render_view_host()->GetView(); |
1546 if (!delegate_->IsHidden() && new_rfh_has_view) { | 1533 if (!delegate_->IsHidden() && new_rfh_has_view) { |
1547 // In most cases, we need to show the new view. | 1534 // In most cases, we need to show the new view. |
1548 render_frame_host_->GetView()->Show(); | 1535 render_frame_host_->render_view_host()->GetView()->Show(); |
1549 } | 1536 } |
1550 if (!new_rfh_has_view) { | 1537 if (!new_rfh_has_view) { |
1551 // If the view is gone, then this RenderViewHost died while it was hidden. | 1538 // If the view is gone, then this RenderViewHost died while it was hidden. |
1552 // We ignored the RenderProcessGone call at the time, so we should send it | 1539 // We ignored the RenderProcessGone call at the time, so we should send it |
1553 // now to make sure the sad tab shows up, etc. | 1540 // now to make sure the sad tab shows up, etc. |
1554 DCHECK(!render_frame_host_->IsRenderFrameLive()); | 1541 DCHECK(!render_frame_host_->IsRenderFrameLive()); |
1555 DCHECK(!render_frame_host_->render_view_host()->IsRenderViewLive()); | 1542 DCHECK(!render_frame_host_->render_view_host()->IsRenderViewLive()); |
1556 delegate_->RenderProcessGoneFromRenderManager( | 1543 delegate_->RenderProcessGoneFromRenderManager( |
1557 render_frame_host_->render_view_host()); | 1544 render_frame_host_->render_view_host()); |
1558 } | 1545 } |
1559 | 1546 |
1560 // For top-level frames, also hide the old RenderViewHost's view. | 1547 // For top-level frames, also hide the old RenderViewHost's view. |
1561 // TODO(creis): As long as show/hide are on RVH, we don't want to hide on | 1548 // TODO(creis): As long as show/hide are on RVH, we don't want to hide on |
1562 // subframe navigations or we will interfere with the top-level frame. | 1549 // subframe navigations or we will interfere with the top-level frame. |
1563 if (is_main_frame && old_render_frame_host->render_view_host()->GetView()) | 1550 if (is_main_frame && old_render_frame_host->render_view_host()->GetView()) |
1564 old_render_frame_host->render_view_host()->GetView()->Hide(); | 1551 old_render_frame_host->render_view_host()->GetView()->Hide(); |
1565 | 1552 |
1566 // Make sure the size is up to date. (Fix for bug 1079768.) | 1553 // Make sure the size is up to date. (Fix for bug 1079768.) |
1567 delegate_->UpdateRenderViewSizeForRenderManager(); | 1554 delegate_->UpdateRenderViewSizeForRenderManager(); |
1568 | 1555 |
1569 if (will_focus_location_bar) { | 1556 if (will_focus_location_bar) { |
1570 delegate_->SetFocusToLocationBar(false); | 1557 delegate_->SetFocusToLocationBar(false); |
1571 } else if (focus_render_view && render_frame_host_->GetView()) { | 1558 } else if (focus_render_view && |
1572 render_frame_host_->GetView()->Focus(); | 1559 render_frame_host_->render_view_host()->GetView()) { |
| 1560 render_frame_host_->render_view_host()->GetView()->Focus(); |
1573 } | 1561 } |
1574 | 1562 |
1575 // Notify that we've swapped RenderFrameHosts. We do this before shutting down | 1563 // Notify that we've swapped RenderFrameHosts. We do this before shutting down |
1576 // the RFH so that we can clean up RendererResources related to the RFH first. | 1564 // the RFH so that we can clean up RendererResources related to the RFH first. |
1577 delegate_->NotifySwappedFromRenderManager( | 1565 delegate_->NotifySwappedFromRenderManager( |
1578 old_render_frame_host.get(), render_frame_host_.get(), is_main_frame); | 1566 old_render_frame_host.get(), render_frame_host_.get(), is_main_frame); |
1579 | 1567 |
1580 // Swap out the old frame now that the new one is visible. | 1568 // Swap out the old frame now that the new one is visible. |
1581 // This will swap it out and then put it on the proxy list (if there are other | 1569 // This will swap it out and then put it on the proxy list (if there are other |
1582 // active views in its SiteInstance) or schedule it for deletion when the swap | 1570 // active views in its SiteInstance) or schedule it for deletion when the swap |
1583 // out ack arrives (or immediately if the process isn't live). | 1571 // out ack arrives (or immediately if the process isn't live). |
1584 // In the --site-per-process case, old subframe RHFs are not kept alive inside | 1572 // In the --site-per-process case, old subframe RHFs are not kept alive inside |
1585 // the proxy. | 1573 // the proxy. |
1586 SwapOutOldFrame(old_render_frame_host.Pass()); | 1574 SwapOutOldFrame(old_render_frame_host.Pass()); |
1587 | 1575 |
1588 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1576 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
1589 switches::kSitePerProcess) && | 1577 switches::kSitePerProcess) && |
1590 !is_main_frame) { | 1578 !is_main_frame) { |
1591 // If this is a subframe, it should have a CrossProcessFrameConnector | 1579 // If this is a subframe, it should have a CrossProcessFrameConnector |
1592 // created already. Use it to link the new RFH's view to the proxy that | 1580 // created already. Use it to link the new RFH's view to the proxy that |
1593 // belongs to the parent frame's SiteInstance. | 1581 // belongs to the parent frame's SiteInstance. |
1594 // Note: We do this after swapping out the old RFH because that may create | 1582 // Note: We do this after swapping out the old RFH because that may create |
1595 // the proxy we're looking for. | 1583 // the proxy we're looking for. |
1596 RenderFrameProxyHost* proxy_to_parent = GetProxyToParent(); | 1584 RenderFrameProxyHost* proxy_to_parent = GetProxyToParent(); |
1597 if (proxy_to_parent) { | 1585 if (proxy_to_parent) { |
1598 proxy_to_parent->SetChildRWHView(render_frame_host_->GetView()); | 1586 proxy_to_parent->SetChildRWHView( |
| 1587 render_frame_host_->render_view_host()->GetView()); |
1599 } | 1588 } |
1600 | 1589 |
1601 // Since the new RenderFrameHost is now committed, there must be no proxies | 1590 // Since the new RenderFrameHost is now committed, there must be no proxies |
1602 // for its SiteInstance. Delete any existing ones. | 1591 // for its SiteInstance. Delete any existing ones. |
1603 RenderFrameProxyHostMap::iterator iter = | 1592 RenderFrameProxyHostMap::iterator iter = |
1604 proxy_hosts_.find(render_frame_host_->GetSiteInstance()->GetId()); | 1593 proxy_hosts_.find(render_frame_host_->GetSiteInstance()->GetId()); |
1605 if (iter != proxy_hosts_.end()) { | 1594 if (iter != proxy_hosts_.end()) { |
1606 delete iter->second; | 1595 delete iter->second; |
1607 proxy_hosts_.erase(iter); | 1596 proxy_hosts_.erase(iter); |
1608 } | 1597 } |
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1879 void RenderFrameHostManager::DeleteRenderFrameProxyHost( | 1868 void RenderFrameHostManager::DeleteRenderFrameProxyHost( |
1880 SiteInstance* instance) { | 1869 SiteInstance* instance) { |
1881 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId()); | 1870 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId()); |
1882 if (iter != proxy_hosts_.end()) { | 1871 if (iter != proxy_hosts_.end()) { |
1883 delete iter->second; | 1872 delete iter->second; |
1884 proxy_hosts_.erase(iter); | 1873 proxy_hosts_.erase(iter); |
1885 } | 1874 } |
1886 } | 1875 } |
1887 | 1876 |
1888 } // namespace content | 1877 } // namespace content |
OLD | NEW |