Chromium Code Reviews| Index: content/browser/frame_host/navigator_impl.cc |
| diff --git a/content/browser/frame_host/navigator_impl.cc b/content/browser/frame_host/navigator_impl.cc |
| index bd13fd745dc63b81b2f6cf9b42a684aa6a3bbfc3..a6f70b27a14b1dcf035af102092662dfb64f8351 100644 |
| --- a/content/browser/frame_host/navigator_impl.cc |
| +++ b/content/browser/frame_host/navigator_impl.cc |
| @@ -344,14 +344,24 @@ bool NavigatorImpl::NavigateToEntry( |
| // Double check that here. |
| CheckWebUIRendererDoesNotDisplayNormalURL(dest_render_frame_host, dest_url); |
| + // In the case of a transfer navigation, set the destination RenderFrameHost |
| + // as loading. This ensures that the RenderFrameHost gets in a loading state |
| + // without emitting a spurrious DidStartLoading notification at the |
|
Charlie Reis
2016/02/17 05:15:28
nit: spurious
clamy
2016/02/18 17:20:26
Done.
|
| + // FrameTreeNode level (since the FrameTreeNode was already loading). Note |
| + // that this works both for a transfer to a different RenderFrameHost and in |
| + // the rare case where the navigation is transferred back to the same |
| + // RenderFrameHost. |
| + bool is_transfer = entry.transferred_global_request_id().child_id != -1; |
| + if (is_transfer) |
| + dest_render_frame_host->set_is_loading(true); |
| + |
| // Navigate in the desired RenderFrameHost. |
| // We can skip this step in the rare case that this is a transfer navigation |
| // which began in the chosen RenderFrameHost, since the request has already |
| // been issued. In that case, simply resume the response. |
| - bool is_transfer_to_same = |
| - entry.transferred_global_request_id().child_id != -1 && |
| - entry.transferred_global_request_id().child_id == |
| - dest_render_frame_host->GetProcess()->GetID(); |
| + bool is_transfer_to_same = is_transfer && |
| + entry.transferred_global_request_id().child_id == |
| + dest_render_frame_host->GetProcess()->GetID(); |
| if (!is_transfer_to_same) { |
| navigation_data_.reset(new NavigationMetricsData(navigation_start, dest_url, |
| entry.restore_type())); |
| @@ -372,6 +382,7 @@ bool NavigatorImpl::NavigateToEntry( |
| controller_->GetEntryCount())); |
| } else { |
| // No need to navigate again. Just resume the deferred request. |
| + // Also sets the RenderFrameHost back to a loading state again. |
|
Charlie Reis
2016/02/17 05:15:28
nit: set
Where does that happen? I don't see any
clamy
2016/02/17 14:42:06
This remains from a previous version of the patch,
|
| dest_render_frame_host->GetProcess()->ResumeDeferredNavigation( |
| entry.transferred_global_request_id()); |
| } |