Chromium Code Reviews| 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( |