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

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

Issue 2584513003: PlzNavigate: identify same-page browser-initiated navigation. (Closed)
Patch Set: Rebase. Created 3 years, 10 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/browser/frame_host/navigation_request.cc
diff --git a/content/browser/frame_host/navigation_request.cc b/content/browser/frame_host/navigation_request.cc
index 19395064f60735c176a6bdf25b5a622ba416abb9..4a0c7cec73ffc4825e29fd96547d6e33faaef1c2 100644
--- a/content/browser/frame_host/navigation_request.cc
+++ b/content/browser/frame_host/navigation_request.cc
@@ -72,12 +72,13 @@ void UpdateLoadFlagsWithCacheFlags(
*load_flags |=
net::LOAD_ONLY_FROM_CACHE | net::LOAD_SKIP_CACHE_VALIDATION;
break;
- case FrameMsg_Navigate_Type::NORMAL:
+ case FrameMsg_Navigate_Type::SAME_DOCUMENT:
+ case FrameMsg_Navigate_Type::DIFFERENT_DOCUMENT:
+ case FrameMsg_Navigate_Type::HISTORY_SAME_DOCUMENT:
+ case FrameMsg_Navigate_Type::HISTORY_DIFFERENT_DOCUMENT:
if (is_post)
*load_flags |= net::LOAD_VALIDATE_CACHE;
break;
- default:
- break;
}
}
@@ -231,8 +232,7 @@ std::unique_ptr<NavigationRequest> NavigationRequest::CreateBrowserInitiated(
blink::WebMixedContentContextType::Blockable,
initiator),
entry.ConstructRequestNavigationParams(
- frame_entry, is_same_document_history_load,
- is_history_navigation_in_new_child,
+ frame_entry, is_history_navigation_in_new_child,
entry.GetSubframeUniqueNames(frame_tree_node),
frame_tree_node->has_committed_real_load(),
controller->GetPendingEntryIndex() == -1,
@@ -252,34 +252,42 @@ std::unique_ptr<NavigationRequest> NavigationRequest::CreateRendererInitiated(
const BeginNavigationParams& begin_params,
int current_history_list_offset,
int current_history_list_length) {
- // TODO(clamy): Check if some PageState should be provided here.
+ // Only normal navigations to a different document or reloads are expected.
+ // - Renderer-initiated fragment-navigations never take place in the browser,
+ // even with PlzNavigate.
+ // - Restore-navigations are always browser-initiated.
+ // - History-navigations use the browser-initiated path, event the ones that
+ // are initiated by a javascript script, please see the IPC message
+ // ViewHostMsg_GoToEntryAtOffset.
+ DCHECK(FrameMsg_Navigate_Type::IsReload(common_params.navigation_type) ||
+ common_params.navigation_type ==
+ FrameMsg_Navigate_Type::DIFFERENT_DOCUMENT);
+
// TODO(clamy): See how we should handle override of the user agent when the
// navigation may start in a renderer and commit in another one.
// TODO(clamy): See if the navigation start time should be measured in the
// renderer and sent to the browser instead of being measured here.
// TODO(clamy): The pending history list offset should be properly set.
RequestNavigationParams request_params(
- false, // is_overriding_user_agent
- std::vector<GURL>(), // redirects
- false, // can_load_local_resources
- PageState(), // page_state
- 0, // nav_entry_id
- false, // is_same_document_history_load
- false, // is_history_navigation_in_new_child
- std::map<std::string, bool>(), // subframe_unique_names
+ false, // is_overriding_user_agent
+ std::vector<GURL>(), // redirects
+ false, // can_load_local_resources
+ PageState(), // page_state
+ 0, // nav_entry_id
+ false, // is_history_navigation_in_new_child
+ std::map<std::string, bool>(), // subframe_unique_names
frame_tree_node->has_committed_real_load(),
- false, // intended_as_new_entry
- -1, // pending_history_list_offset
+ false, // intended_as_new_entry
+ -1, // pending_history_list_offset
current_history_list_offset, current_history_list_length,
- false, // is_view_source
- false, // should_clear_history_list
+ false, // is_view_source
+ false, // should_clear_history_list
begin_params.has_user_gesture);
- std::unique_ptr<NavigationRequest> navigation_request(
- new NavigationRequest(frame_tree_node, common_params, begin_params,
- request_params,
- false, // browser_initiated
- false, // may_transfer
- nullptr, nullptr));
+ std::unique_ptr<NavigationRequest> navigation_request(new NavigationRequest(
+ frame_tree_node, common_params, begin_params, request_params,
+ false, // browser_initiated
+ false, // may_transfer
+ nullptr, nullptr));
return navigation_request;
}
@@ -346,7 +354,8 @@ void NavigationRequest::BeginNavigation() {
state_ = STARTED;
RenderFrameDevToolsAgentHost::OnBeforeNavigation(navigation_handle_.get());
- if (ShouldMakeNetworkRequestForURL(common_params_.url)) {
+ if (ShouldMakeNetworkRequestForURL(common_params_.url) &&
+ !navigation_handle_->IsSamePage()) {
// It's safe to use base::Unretained because this NavigationRequest owns
// the NavigationHandle where the callback will be stored.
// TODO(clamy): pass the real value for |is_external_protocol| if needed.
@@ -382,8 +391,6 @@ void NavigationRequest::BeginNavigation() {
void NavigationRequest::CreateNavigationHandle(int pending_nav_entry_id) {
DCHECK_EQ(frame_tree_node_->navigation_request(), this);
- // TODO(nasko): Update the NavigationHandle creation to ensure that the
- // proper values are specified for is_same_page.
FrameTreeNode* frame_tree_node = frame_tree_node_;
std::vector<GURL> redirect_chain;
@@ -393,11 +400,11 @@ void NavigationRequest::CreateNavigationHandle(int pending_nav_entry_id) {
std::unique_ptr<NavigationHandleImpl> navigation_handle =
NavigationHandleImpl::Create(
- common_params_.url, redirect_chain, frame_tree_node_,
- !browser_initiated_,
- false, // is_same_page
- common_params_.navigation_start, pending_nav_entry_id,
- false); // started_in_context_menu
+ common_params_.url, redirect_chain, frame_tree_node_,
+ !browser_initiated_, FrameMsg_Navigate_Type::IsSameDocument(
+ common_params_.navigation_type),
+ common_params_.navigation_start, pending_nav_entry_id,
+ false); // started_in_context_menu
if (!frame_tree_node->navigation_request()) {
// A callback could have cancelled this request synchronously in which case
@@ -723,7 +730,8 @@ void NavigationRequest::OnWillProcessResponseChecksComplete(
}
void NavigationRequest::CommitNavigation() {
- DCHECK(response_ || !ShouldMakeNetworkRequestForURL(common_params_.url));
+ DCHECK(response_ || !ShouldMakeNetworkRequestForURL(common_params_.url) ||
+ navigation_handle_->IsSamePage());
DCHECK(!common_params_.url.SchemeIs(url::kJavaScriptScheme));
// Retrieve the RenderFrameHost that needs to commit the navigation.
« no previous file with comments | « content/browser/frame_host/navigation_handle_impl_browsertest.cc ('k') | content/browser/frame_host/navigator_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698