Chromium Code Reviews| Index: content/browser/frame_host/navigation_controller_impl.cc |
| diff --git a/content/browser/frame_host/navigation_controller_impl.cc b/content/browser/frame_host/navigation_controller_impl.cc |
| index 408314a6dd9d14cfba848db31d86851fa19b1317..99e88e14015aeaf87a05d314d052bfc0d65435e7 100644 |
| --- a/content/browser/frame_host/navigation_controller_impl.cc |
| +++ b/content/browser/frame_host/navigation_controller_impl.cc |
| @@ -847,12 +847,19 @@ bool NavigationControllerImpl::RendererDidNavigate( |
| // If this is an error load, we may have already removed the pending entry |
| // when we got the notice of the load failure. If so, look at the copy of the |
| // pending parameters that were saved. |
| + // |
| + // TODO(creis): This block should be unnecessary now that we pass |
| + // params.should_replace_current_entry. Remove it once we verify with the |
| + // check below. |
| if (params.url_is_unreachable && failed_pending_entry_id_ != 0) { |
| details->did_replace_entry = failed_pending_entry_should_replace_; |
| } else { |
| details->did_replace_entry = pending_entry_ && |
| pending_entry_->should_replace_entry(); |
| } |
| + CHECK(!details->did_replace_entry || params.should_replace_current_entry); |
| + if (params.should_replace_current_entry) |
| + details->did_replace_entry = true; |
| // Do navigation-type specific actions. These will make and commit an entry. |
| details->type = ClassifyNavigation(rfh, params); |
| @@ -997,6 +1004,18 @@ NavigationType NavigationControllerImpl::ClassifyNavigation( |
| return NAVIGATION_TYPE_NEW_SUBFRAME; |
| } |
| + // Cross-process location.replace navigations should be classified as New with |
| + // replacement rather than ExistingPage, since it is not safe to reuse the |
| + // NavigationEntry. |
| + // TODO(creis): Have the renderer classify location.replace as |
| + // did_create_new_entry for all cases and eliminate this special case. This |
| + // requires updating several test expectations. See https://crbug.com/317812. |
|
Avi (use Gerrit)
2016/02/08 16:02:28
Wrong bug number; you mean 317872.
Charlie Reis
2016/02/08 17:13:21
Done.
|
| + if (!rfh->GetParent() && GetLastCommittedEntry() && |
| + GetLastCommittedEntry()->site_instance() != rfh->GetSiteInstance() && |
| + params.should_replace_current_entry) { |
| + return NAVIGATION_TYPE_NEW_PAGE; |
| + } |
| + |
| // We only clear the session history when navigating to a new page. |
| DCHECK(!params.history_list_was_cleared); |