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 5e1e3afc2defdc7053748e49a07b2cacb0b70555..0c8001bd1b35a527c6eb0347dfaf6a6259e1d560 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 : |
(Do not use) nasko
2014/08/28 16:39:09
nit: no need for space between the constant and ":
clamy
2014/09/02 18:25:19
Done.
|
+ 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) { |
@@ -545,10 +586,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()) |
@@ -556,7 +598,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; |
} |
@@ -583,6 +626,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 |
@@ -615,8 +662,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( |