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

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: Added a unit test for the reload case Created 6 years, 4 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 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(

Powered by Google App Engine
This is Rietveld 408576698