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 851333005: Revert of Make RenderFrame(Host) own a RenderWidget(Host). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 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 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698