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

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

Issue 483773002: PlzNavigate: implement CommitNavigation on the browser side (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed Nasko's comments Created 6 years, 3 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/render_frame_host_manager.cc
diff --git a/content/browser/frame_host/render_frame_host_manager.cc b/content/browser/frame_host/render_frame_host_manager.cc
index 0d95e1e361c7f630c4187a8eec3a49fa0828b8a0..e9dc8f023c21025187091e26deebbefc0ebeb888 100644
--- a/content/browser/frame_host/render_frame_host_manager.cc
+++ b/content/browser/frame_host/render_frame_host_manager.cc
@@ -48,19 +48,43 @@ namespace content {
namespace {
// PlzNavigate
+// Returns the net load flags to use based on the navigation type.
+int LoadFlagFromNavigationType(FrameMsg_Navigate_Type::Value navigation_type) {
+ int load_flags = net::LOAD_NORMAL;
+ switch (navigation_type) {
+ case FrameMsg_Navigate_Type::RELOAD:
+ case FrameMsg_Navigate_Type::RELOAD_ORIGINAL_REQUEST_URL:
+ load_flags |= net::LOAD_VALIDATE_CACHE;
+ break;
+ case FrameMsg_Navigate_Type::RELOAD_IGNORING_CACHE:
+ load_flags |= net::LOAD_BYPASS_CACHE;
+ break;
+ case FrameMsg_Navigate_Type::RESTORE:
+ load_flags |= net::LOAD_PREFERRING_CACHE;
+ break;
+ case FrameMsg_Navigate_Type::RESTORE_WITH_POST:
+ load_flags |= net::LOAD_ONLY_FROM_CACHE;
+ break;
+ case FrameMsg_Navigate_Type::NORMAL:
+ default :
+ break;
+ }
+ return load_flags;
+}
+
+// PlzNavigate
// Simulates a renderer response to a navigation request when there is no live
// renderer.
FrameHostMsg_BeginNavigation_Params BeginNavigationFromNavigate(
- const FrameMsg_Navigate_Params& navigate_params) {
+ const FrameMsg_Navigate_Params& navigate_params,
+ FrameMsg_Navigate_Type::Value navigation_type) {
FrameHostMsg_BeginNavigation_Params begin_navigation_params;
begin_navigation_params.method = navigate_params.is_post ? "POST" : "GET";
begin_navigation_params.url = navigate_params.url;
begin_navigation_params.referrer =
Referrer(navigate_params.referrer.url, navigate_params.referrer.policy);
-
- // TODO(clamy): This should be modified to take into account caching policy
- // requirements (eg for POST reloads).
- begin_navigation_params.load_flags = net::LOAD_NORMAL;
+ begin_navigation_params.load_flags =
+ LoadFlagFromNavigationType(navigation_type);
// TODO(clamy): Post data from the browser should be put in the request body.
@@ -73,6 +97,23 @@ FrameHostMsg_BeginNavigation_Params BeginNavigationFromNavigate(
return begin_navigation_params;
}
+void UpdateCommitNavParamsFromBeginNavParams(
+ const FrameHostMsg_BeginNavigation_Params& begin_navigation_params,
+ FrameMsg_CommitNavigation_Params* commit_navigation_params) {
+ commit_navigation_params->referrer = begin_navigation_params.referrer;
+ commit_navigation_params->transition =
+ begin_navigation_params.transition_type;
+}
+
+void UpdateCommitNavParamsFromCommitInfo(
+ const NavigationBeforeCommitInfo& commit_info,
+ FrameMsg_CommitNavigation_Params* commit_navigation_params) {
+ commit_navigation_params->url = commit_info.navigation_url;
+ commit_navigation_params->stream_url = commit_info.stream_url;
+ commit_navigation_params->browser_navigation_start =
+ commit_info.browser_navigation_start;
+}
+
} // namespace
bool RenderFrameHostManager::ClearRFHsPendingShutdown(FrameTreeNode* node) {
@@ -548,10 +589,11 @@ void RenderFrameHostManager::ResetProxyHosts() {
// PlzNavigate
bool RenderFrameHostManager::RequestNavigation(
- const NavigationEntryImpl& entry,
+ scoped_ptr<FrameMsg_CommitNavigation_Params> commit_navigation_params,
const FrameMsg_Navigate_Params& navigate_params) {
CHECK(CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnableBrowserSideNavigation));
+ commit_navigation_params_ = commit_navigation_params.Pass();
// TODO(clamy): replace RenderViewHost::IsRenderViewLive by
// RenderFrameHost::IsLive.
if (render_frame_host_->render_view_host()->IsRenderViewLive())
@@ -559,7 +601,8 @@ bool RenderFrameHostManager::RequestNavigation(
return true;
// The navigation request is sent directly to the IO thread.
- OnBeginNavigation(BeginNavigationFromNavigate(navigate_params));
+ OnBeginNavigation(BeginNavigationFromNavigate(
+ navigate_params, commit_navigation_params_->navigation_type));
return true;
}
@@ -586,6 +629,10 @@ void RenderFrameHostManager::OnBeginNavigation(
navigation_request_.reset(new NavigationRequest(
info, frame_tree_node_->frame_tree_node_id()));
navigation_request_->BeginNavigation(params.request_body);
+
+ DCHECK(commit_navigation_params_.get());
+ UpdateCommitNavParamsFromBeginNavParams(
+ params, commit_navigation_params_.get());
}
// PlzNavigate
@@ -618,8 +665,10 @@ void RenderFrameHostManager::CommitNavigation(
render_frame_host_->render_view_host()->AttachToFrameTree();
}
+ DCHECK(commit_navigation_params_.get());
+ UpdateCommitNavParamsFromCommitInfo(info, commit_navigation_params_.get());
frame_tree_node_->navigator()->CommitNavigation(
- render_frame_host_.get(), info);
+ render_frame_host_.get(), commit_navigation_params_.Pass());
}
void RenderFrameHostManager::Observe(

Powered by Google App Engine
This is Rietveld 408576698