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

Unified Diff: content/browser/frame_host/navigation_controller_impl.cc

Issue 1082083002: Fix ClassifyNavigation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix test Created 5 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | content/browser/frame_host/navigation_controller_impl_browsertest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 2ebdd261005e2f91e2f6cecadceeec6a5102ef6b..01ab901fe7d5e6c5bc9b4752cdfc21728f030c2c 100644
--- a/content/browser/frame_host/navigation_controller_impl.cc
+++ b/content/browser/frame_host/navigation_controller_impl.cc
@@ -912,12 +912,12 @@ NavigationType NavigationControllerImpl::ClassifyNavigation(
RenderFrameHostImpl* rfh,
const FrameHostMsg_DidCommitProvisionalLoad_Params& params) const {
if (params.page_id == -1) {
- // TODO(nasko, creis): An out-of-process child frame has no way of
- // knowing the page_id of its parent, so it is passing back -1. The
- // semantics here should be re-evaluated during session history refactor
- // (see http://crbug.com/236848). For now, we assume this means the
- // child frame loaded and proceed. Note that this may do the wrong thing
- // for cross-process AUTO_SUBFRAME navigations.
+ // TODO(nasko, creis): An out-of-process child frame has no way of knowing
+ // the page_id of its parent, so it is passing back -1. The semantics here
+ // should be re-evaluated during session history refactor (see
+ // http://crbug.com/236848 and in particular http://crbug.com/464014). For
+ // now, we assume this means the child frame loaded and proceed. Note that
+ // this may do the wrong thing for cross-process AUTO_SUBFRAME navigations.
if (rfh->IsCrossProcessSubframe())
return NAVIGATION_TYPE_NEW_SUBFRAME;
@@ -1025,14 +1025,21 @@ NavigationType NavigationControllerImpl::ClassifyNavigation(
existing_entry != pending_entry_ &&
pending_entry_->GetPageID() == -1 &&
existing_entry == GetLastCommittedEntry()) {
- // In this case, we have a pending entry for a URL but WebCore didn't do a
- // new navigation. This happens when you press enter in the URL bar to
- // reload. We will create a pending entry, but WebKit will convert it to
- // a reload since it's the same page and not create a new entry for it
- // (the user doesn't want to have a new back/forward entry when they do
- // this). If this matches the last committed entry, we want to just ignore
- // the pending entry and go back to where we were (the "existing entry").
- return NAVIGATION_TYPE_SAME_PAGE;
+ const std::vector<GURL>& existing_redirect_chain =
+ existing_entry->GetRedirectChain();
+
+ if (existing_entry->GetURL() == pending_entry_->GetURL() ||
+ (existing_redirect_chain.size() &&
+ existing_redirect_chain[0] == pending_entry_->GetURL())) {
+ // In this case, we have a pending entry for a URL but WebCore didn't do a
+ // new navigation. This happens when you press enter in the URL bar to
+ // reload. We will create a pending entry, but WebKit will convert it to
+ // a reload since it's the same page and not create a new entry for it
+ // (the user doesn't want to have a new back/forward entry when they do
+ // this). If this matches the last committed entry, we want to just ignore
+ // the pending entry and go back to where we were (the "existing entry").
+ return NAVIGATION_TYPE_SAME_PAGE;
+ }
}
// Any toplevel navigations with the same base (minus the reference fragment)
« no previous file with comments | « no previous file | content/browser/frame_host/navigation_controller_impl_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698