| 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 69e9fd3862c1f9e060a9edb7e7ee75b8b06a3a98..eddc5019eafdf840cef27f84f8f00a9d2f723d21 100644
|
| --- a/content/browser/frame_host/navigation_controller_impl.cc
|
| +++ b/content/browser/frame_host/navigation_controller_impl.cc
|
| @@ -781,7 +781,8 @@ bool NavigationControllerImpl::RendererDidNavigate(
|
| RenderFrameHostImpl* rfh,
|
| const FrameHostMsg_DidCommitProvisionalLoad_Params& params,
|
| LoadCommittedDetails* details,
|
| - bool is_navigation_within_page) {
|
| + bool is_navigation_within_page,
|
| + NavigationHandleImpl* navigation_handle) {
|
| is_initial_navigation_ = false;
|
|
|
| // Save the previous state before we clobber it.
|
| @@ -812,7 +813,7 @@ bool NavigationControllerImpl::RendererDidNavigate(
|
|
|
| // Save reload type and timestamp for a reload navigation to detect
|
| // consecutive reloads when the next reload is requested.
|
| - if (PendingEntryMatchesHandle(rfh->navigation_handle())) {
|
| + if (PendingEntryMatchesHandle(navigation_handle)) {
|
| if (pending_entry_->reload_type() != ReloadType::NONE) {
|
| last_committed_reload_type_ = pending_entry_->reload_type();
|
| last_committed_reload_time_ =
|
| @@ -827,14 +828,16 @@ bool NavigationControllerImpl::RendererDidNavigate(
|
| switch (details->type) {
|
| case NAVIGATION_TYPE_NEW_PAGE:
|
| RendererDidNavigateToNewPage(rfh, params, details->is_in_page,
|
| - details->did_replace_entry);
|
| + details->did_replace_entry,
|
| + navigation_handle);
|
| break;
|
| case NAVIGATION_TYPE_EXISTING_PAGE:
|
| details->did_replace_entry = details->is_in_page;
|
| - RendererDidNavigateToExistingPage(rfh, params, details->is_in_page);
|
| + RendererDidNavigateToExistingPage(rfh, params, details->is_in_page,
|
| + navigation_handle);
|
| break;
|
| case NAVIGATION_TYPE_SAME_PAGE:
|
| - RendererDidNavigateToSamePage(rfh, params);
|
| + RendererDidNavigateToSamePage(rfh, params, navigation_handle);
|
| break;
|
| case NAVIGATION_TYPE_NEW_SUBFRAME:
|
| RendererDidNavigateNewSubframe(rfh, params, details->is_in_page,
|
| @@ -1063,7 +1066,8 @@ void NavigationControllerImpl::RendererDidNavigateToNewPage(
|
| RenderFrameHostImpl* rfh,
|
| const FrameHostMsg_DidCommitProvisionalLoad_Params& params,
|
| bool is_in_page,
|
| - bool replace_entry) {
|
| + bool replace_entry,
|
| + NavigationHandleImpl* handle) {
|
| std::unique_ptr<NavigationEntryImpl> new_entry;
|
| bool update_virtual_url = false;
|
|
|
| @@ -1088,17 +1092,13 @@ void NavigationControllerImpl::RendererDidNavigateToNewPage(
|
|
|
| // Only make a copy of the pending entry if it is appropriate for the new page
|
| // that was just loaded. Verify this by checking if the entry corresponds
|
| - // to the current navigation handle. Note that in some tests the render frame
|
| - // host does not have a valid handle. Additionally, coarsely check that:
|
| + // to the given navigation handle. Additionally, coarsely check that:
|
| // 1. The SiteInstance hasn't been assigned to something else.
|
| // 2. The pending entry was intended as a new entry, rather than being a
|
| // history navigation that was interrupted by an unrelated,
|
| // renderer-initiated navigation.
|
| // TODO(csharrison): Investigate whether we can remove some of the coarser
|
| // checks.
|
| - NavigationHandleImpl* handle = rfh->navigation_handle();
|
| - DCHECK(handle);
|
| -
|
| if (!new_entry &&
|
| PendingEntryMatchesHandle(handle) && pending_entry_index_ == -1 &&
|
| (!pending_entry_->site_instance() ||
|
| @@ -1178,7 +1178,8 @@ void NavigationControllerImpl::RendererDidNavigateToNewPage(
|
| void NavigationControllerImpl::RendererDidNavigateToExistingPage(
|
| RenderFrameHostImpl* rfh,
|
| const FrameHostMsg_DidCommitProvisionalLoad_Params& params,
|
| - bool is_in_page) {
|
| + bool is_in_page,
|
| + NavigationHandleImpl* handle) {
|
| // We should only get here for main frame navigations.
|
| DCHECK(!rfh->GetParent());
|
|
|
| @@ -1186,7 +1187,6 @@ void NavigationControllerImpl::RendererDidNavigateToExistingPage(
|
| // in https://crbug.com/596707.
|
|
|
| NavigationEntryImpl* entry;
|
| - NavigationHandleImpl* handle = rfh->navigation_handle();
|
| if (params.intended_as_new_entry) {
|
| // This was intended as a new entry but the pending entry was lost in the
|
| // meanwhile and no new page was created. We are stuck at the last committed
|
| @@ -1259,7 +1259,8 @@ void NavigationControllerImpl::RendererDidNavigateToExistingPage(
|
|
|
| void NavigationControllerImpl::RendererDidNavigateToSamePage(
|
| RenderFrameHostImpl* rfh,
|
| - const FrameHostMsg_DidCommitProvisionalLoad_Params& params) {
|
| + const FrameHostMsg_DidCommitProvisionalLoad_Params& params,
|
| + NavigationHandleImpl* handle) {
|
| // This classification says that we have a pending entry that's the same as
|
| // the last committed entry. This entry is guaranteed to exist by
|
| // ClassifyNavigation. All we need to do is update the existing entry.
|
| @@ -1284,7 +1285,7 @@ void NavigationControllerImpl::RendererDidNavigateToSamePage(
|
| // If a user presses enter in the omnibox and the server redirects, the URL
|
| // might change (but it's still considered a SAME_PAGE navigation). So we must
|
| // update the SSL status.
|
| - existing_entry->GetSSL() = rfh->navigation_handle()->ssl_status();
|
| + existing_entry->GetSSL() = handle->ssl_status();
|
|
|
| // The extra headers may have changed due to reloading with different headers.
|
| existing_entry->set_extra_headers(pending_entry_->extra_headers());
|
|
|