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( |