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

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

Powered by Google App Engine
This is Rietveld 408576698