Commit 43d7583e authored by Fergal Daly's avatar Fergal Daly Committed by Chromium LUCI CQ

Rename ReinitializeRenderFrame to ReinitializeMainRenderFrame.

It is only used for main frames:
- the initial main frame of a WebContents. https://crrev.com/c/2617521/4
  is a CQ run with an extra DCHECK to demonstrate this.
- main frames that are being resurrected for javascript: URLs.

Bug: 1161170
Change-Id: I49c60cae2c6be54a7b87b991dd77653ddfdc1006
Cq-Do-Not-Cancel-Tryjobs: true
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2617521
Commit-Queue: Fergal Daly <fergal@chromium.org>
Reviewed-by: default avatarAlex Moshchuk <alexmos@chromium.org>
Auto-Submit: Fergal Daly <fergal@chromium.org>
Cr-Commit-Position: refs/heads/master@{#842849}
parent c5b4f7b1
...@@ -914,10 +914,18 @@ RenderFrameHostImpl* RenderFrameHostManager::GetFrameHostForNavigation( ...@@ -914,10 +914,18 @@ RenderFrameHostImpl* RenderFrameHostManager::GetFrameHostForNavigation(
navigation_rfh == speculative_render_frame_host_.get())); navigation_rfh == speculative_render_frame_host_.get()));
DCHECK(!navigation_rfh->must_be_replaced()); DCHECK(!navigation_rfh->must_be_replaced());
// If the RenderFrame that needs to navigate is not live (its process was // If the RenderFrame that needs to navigate is not live (its process was just
// just created), initialize it. // created), initialize it. This can only happen for the initial main frame of
// a WebContents which starts non-live but non-crashed.
//
// A speculative RenderFrameHost is created in the live state. A crashed
// RenderFrameHost is replaced by a new speculative RenderFrameHost. A
// non-speculative RenderFrameHost that is being reused is already live. This
// leaves only a non-speculative RenderFrameHost that has never been used
// before.
if (!navigation_rfh->IsRenderFrameLive()) { if (!navigation_rfh->IsRenderFrameLive()) {
if (!ReinitializeRenderFrame(navigation_rfh)) DCHECK(!frame_tree_node_->parent());
if (!ReinitializeMainRenderFrame(navigation_rfh))
return nullptr; return nullptr;
notify_webui_of_rf_creation = true; notify_webui_of_rf_creation = true;
...@@ -1756,7 +1764,7 @@ bool RenderFrameHostManager::InitializeMainRenderFrameForImmediateUse() { ...@@ -1756,7 +1764,7 @@ bool RenderFrameHostManager::InitializeMainRenderFrameForImmediateUse() {
render_frame_host_->reset_must_be_replaced(); render_frame_host_->reset_must_be_replaced();
if (!ReinitializeRenderFrame(render_frame_host_.get())) { if (!ReinitializeMainRenderFrame(render_frame_host_.get())) {
NOTREACHED(); NOTREACHED();
return false; return false;
} }
...@@ -2842,8 +2850,10 @@ int RenderFrameHostManager::GetReplacementRoutingId( ...@@ -2842,8 +2850,10 @@ int RenderFrameHostManager::GetReplacementRoutingId(
} }
} }
bool RenderFrameHostManager::ReinitializeRenderFrame( bool RenderFrameHostManager::ReinitializeMainRenderFrame(
RenderFrameHostImpl* render_frame_host) { RenderFrameHostImpl* render_frame_host) {
CHECK(!frame_tree_node_->parent());
// This should be used only when the RenderFrame is not live. // This should be used only when the RenderFrame is not live.
DCHECK(!render_frame_host->IsRenderFrameLive()); DCHECK(!render_frame_host->IsRenderFrameLive());
DCHECK(!render_frame_host->must_be_replaced()); DCHECK(!render_frame_host->must_be_replaced());
...@@ -2852,29 +2862,10 @@ bool RenderFrameHostManager::ReinitializeRenderFrame( ...@@ -2852,29 +2862,10 @@ bool RenderFrameHostManager::ReinitializeRenderFrame(
CreateOpenerProxies(render_frame_host->GetSiteInstance(), frame_tree_node_); CreateOpenerProxies(render_frame_host->GetSiteInstance(), frame_tree_node_);
// Main frames need both the RenderView and RenderFrame reinitialized, so // Main frames need both the RenderView and RenderFrame reinitialized, so
// use InitRenderView. For cross-process subframes, InitRenderView won't // use InitRenderView.
// recreate the RenderFrame, so use InitRenderFrame instead. Note that for DCHECK(!GetRenderFrameProxyHost(render_frame_host->GetSiteInstance()));
// subframe RenderFrameHosts, the inactive RenderView in their SiteInstance if (!InitRenderView(render_frame_host->render_view_host(), nullptr))
// will be recreated as part of CreateOpenerProxies above. return false;
if (!frame_tree_node_->parent()) {
DCHECK(!GetRenderFrameProxyHost(render_frame_host->GetSiteInstance()));
if (!InitRenderView(render_frame_host->render_view_host(), nullptr))
return false;
} else {
if (!InitRenderFrame(render_frame_host))
return false;
// When a subframe renderer dies, its RenderWidgetHostView is cleared in
// its CrossProcessFrameConnector, so we need to restore it now that it
// is re-initialized.
RenderFrameProxyHost* proxy_to_parent = GetProxyToParent();
if (proxy_to_parent) {
const gfx::Size* size = render_frame_host->frame_size()
? &*render_frame_host->frame_size()
: nullptr;
GetProxyToParent()->SetChildRWHView(render_frame_host->GetView(), size);
}
}
DCHECK(render_frame_host->IsRenderFrameLive()); DCHECK(render_frame_host->IsRenderFrameLive());
......
...@@ -851,7 +851,7 @@ class CONTENT_EXPORT RenderFrameHostManager ...@@ -851,7 +851,7 @@ class CONTENT_EXPORT RenderFrameHostManager
// Helper to reinitialize the RenderFrame, RenderView, and the opener chain // Helper to reinitialize the RenderFrame, RenderView, and the opener chain
// for the provided |render_frame_host|. Used when the |render_frame_host| // for the provided |render_frame_host|. Used when the |render_frame_host|
// needs to be reused for a new navigation, but it is not live. // needs to be reused for a new navigation, but it is not live.
bool ReinitializeRenderFrame(RenderFrameHostImpl* render_frame_host); bool ReinitializeMainRenderFrame(RenderFrameHostImpl* render_frame_host);
// Sets the |pending_rfh| to be the active one. Called when the pending // Sets the |pending_rfh| to be the active one. Called when the pending
// RenderFrameHost commits. // RenderFrameHost commits.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment