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

Unified Diff: content/renderer/render_frame_impl.cc

Issue 1002803002: Classify navigations without page id in parallel to the existing classifier. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: better crash url Created 5 years, 9 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
Index: content/renderer/render_frame_impl.cc
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index aae437eccf675b949c1f14058e2f1c680f971eff..6c5c68cc45be6679613e88efd1f84ca6834ae4a5 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -1091,6 +1091,10 @@ void RenderFrameImpl::OnNavigate(
} else if (is_history_navigation) {
// We must know the page ID of the page we are navigating back to.
DCHECK_NE(history_params.page_id, -1);
+ // We must know the nav entry ID of the page we are navigating back to,
+ // which should be the case because history navigations are browser-
+ // initiated.
+ DCHECK_NE(0, history_params.nav_entry_id);
scoped_ptr<HistoryEntry> entry =
PageStateToHistoryEntry(history_params.page_state);
if (entry) {
@@ -1135,6 +1139,10 @@ void RenderFrameImpl::OnNavigate(
// A session history navigation should have been accompanied by state.
CHECK_EQ(history_params.page_id, -1);
+ // FYIREMOVEME(avi): Page id being -1 will happen with browser-initiated new
+ // (non-history) navigations, and that's the test here. Nav entry unique
+ // ids, however, are always provided with browser-initiated navigations,
+ // history or new, so this test isn't valid for nav entry unique ids.
// Record this before starting the load, we need a lower bound of this time
// to sanitize the navigationStart override set below.
@@ -2436,10 +2444,17 @@ void RenderFrameImpl::didFailProvisionalLoad(blink::WebLocalFrame* frame,
//
// TODO(davidben): This should also take the failed navigation's replacement
// state into account, if a location.replace() failed.
+ ui::PageTransition transition = navigation_state->transition_type();
bool replace =
navigation_state->pending_page_id() != -1 ||
- ui::PageTransitionCoreTypeIs(navigation_state->transition_type(),
- ui::PAGE_TRANSITION_AUTO_SUBFRAME);
+ ui::PageTransitionCoreTypeIs(transition,
+ ui::PAGE_TRANSITION_AUTO_SUBFRAME);
+ bool replace2 =
+ ui::PageTransitionCoreTypeIs(transition, ui::PAGE_TRANSITION_RELOAD) ||
+ transition & ui::PAGE_TRANSITION_FORWARD_BACK ||
+ ui::PageTransitionCoreTypeIs(transition,
+ ui::PAGE_TRANSITION_AUTO_SUBFRAME);
+ DCHECK_EQ(replace, replace2);
// If we failed on a browser initiated request, then make sure that our error
// page load is regarded as the same browser initiated request.
@@ -2457,6 +2472,7 @@ void RenderFrameImpl::didFailProvisionalLoad(blink::WebLocalFrame* frame,
document_state->request_time()),
HistoryNavigationParams(
PageState(), navigation_state->pending_page_id(),
+ navigation_state->pending_nav_entry_id(),
navigation_state->pending_history_list_offset(), -1, 0,
navigation_state->history_list_was_cleared())));
}
@@ -2505,6 +2521,7 @@ void RenderFrameImpl::didCommitProvisionalLoad(
}
internal_data->set_use_error_page(false);
+ bool successful_history_nav = false;
bool is_new_navigation = commit_type == blink::WebStandardCommit;
if (is_new_navigation) {
// We bump our Page ID to correspond with the new session history entry.
@@ -2542,6 +2559,7 @@ void RenderFrameImpl::didCommitProvisionalLoad(
if (navigation_state->pending_page_id() != -1 &&
navigation_state->pending_page_id() != render_view_->page_id_ &&
!navigation_state->request_committed()) {
+ successful_history_nav = true;
Charlie Reis 2015/03/12 18:28:17 nit: Put below the following comment.
Avi (use Gerrit) 2015/03/12 19:21:18 Done.
// This is a successful session history navigation!
render_view_->page_id_ = navigation_state->pending_page_id();
@@ -2550,6 +2568,13 @@ void RenderFrameImpl::didCommitProvisionalLoad(
}
}
+ if (commit_type == blink::WebBackForwardCommit) {
+ // Checking the commit type is planned to be the replacement for the if()
+ // block containing the comment "This is a successful session history
+ // navigation!" Make sure that it fires correspondingly.
+ DCHECK(successful_history_nav);
+ }
+
bool sent = Send(
new FrameHostMsg_DidAssignPageId(routing_id_, render_view_->page_id_));
CHECK(sent); // http://crbug.com/407376
@@ -3696,8 +3721,10 @@ void RenderFrameImpl::SendDidCommitProvisionalLoad(
params.http_status_code = response.httpStatusCode();
params.url_is_unreachable = ds->hasUnreachableURL();
params.is_post = false;
+ params.commit_type = commit_type;
Charlie Reis 2015/03/12 18:28:17 I'd like to avoid exposing this directly if possib
Avi (use Gerrit) 2015/03/12 19:21:17 Let me hack on getting the tests to pass, but I'm
params.post_id = -1;
params.page_id = render_view_->page_id_;
+ params.nav_entry_id = navigation_state->pending_nav_entry_id();
// We need to track the RenderViewHost routing_id because of downstream
// dependencies (crbug.com/392171 DownloadRequestHandle, SaveFileManager,
// ResourceDispatcherHostImpl, MediaStreamUIProxy,

Powered by Google App Engine
This is Rietveld 408576698