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 6fcb94122deb087aa949dec2e8299f08e17b58d1..babd417a4e304a7ae0107c4a6fa9105326325b9c 100644 |
--- a/content/browser/frame_host/render_frame_host_manager.cc |
+++ b/content/browser/frame_host/render_frame_host_manager.cc |
@@ -30,6 +30,7 @@ |
#include "content/browser/site_instance_impl.h" |
#include "content/browser/webui/web_ui_controller_factory_registry.h" |
#include "content/browser/webui/web_ui_impl.h" |
+#include "content/common/navigation_params.h" |
#include "content/common/view_messages.h" |
#include "content/public/browser/content_browser_client.h" |
#include "content/public/browser/notification_service.h" |
@@ -45,35 +46,76 @@ |
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) { |
+// Generates a default FrameHostMsg_BeginNavigation_Params to be used when there |
+// is no live renderer. |
+FrameHostMsg_BeginNavigation_Params MakeDefaultBeginNavigation( |
+ const NavigationParamsWithRequestAndCommitInfo& navigation_params) { |
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.url = navigation_params.url; |
+ begin_navigation_params.referrer = navigation_params.referrer; |
+ begin_navigation_params.transition = navigation_params.transition; |
+ begin_navigation_params.method = navigation_params.is_post? "POST" : "GET"; |
+ begin_navigation_params.load_flags = |
+ LoadFlagFromNavigationType(navigation_params.navigation_type); |
// TODO(clamy): Post data from the browser should be put in the request body. |
begin_navigation_params.has_user_gesture = false; |
- begin_navigation_params.transition_type = navigate_params.transition; |
- begin_navigation_params.should_replace_current_entry = |
- navigate_params.should_replace_current_entry; |
- begin_navigation_params.allow_download = |
- navigate_params.allow_download; |
return begin_navigation_params; |
} |
-} // namespace |
+// PlzNavigate |
+FrameMsg_CommitNavigation_Params MakeCommitNavigationParams( |
Charlie Reis
2014/09/15 21:19:39
This kind of conversion makes me think we may not
|
+ const NavigationParamsWithRequestAndCommitInfo& navigation_params, |
+ const GURL& stream_url) { |
+ FrameMsg_CommitNavigation_Params commit_navigation_params; |
+ commit_navigation_params.url = navigation_params.url; |
+ commit_navigation_params.referrer = navigation_params.referrer; |
+ commit_navigation_params.transition = navigation_params.transition; |
+ commit_navigation_params.page_id = navigation_params.page_id; |
+ commit_navigation_params.should_clear_history_list = |
+ navigation_params.should_clear_history_list; |
+ commit_navigation_params.pending_history_list_offset = |
+ navigation_params.pending_history_list_offset; |
+ commit_navigation_params.current_history_list_offset = |
+ navigation_params.current_history_list_offset; |
+ commit_navigation_params.current_history_list_length = |
+ navigation_params.current_history_list_length; |
+ commit_navigation_params.page_state = navigation_params.page_state; |
+ commit_navigation_params.navigation_type = navigation_params.navigation_type; |
+ commit_navigation_params.is_overriding_user_agent = |
+ navigation_params.is_overriding_user_agent; |
+ commit_navigation_params.browser_navigation_start = |
+ navigation_params.browser_navigation_start; |
+ commit_navigation_params.stream_url = stream_url; |
+ return commit_navigation_params; |
+} |
bool RenderFrameHostManager::ClearRFHsPendingShutdown(FrameTreeNode* node) { |
node->render_manager()->pending_delete_hosts_.clear(); |
@@ -566,10 +608,11 @@ void RenderFrameHostManager::ResetProxyHosts() { |
// PlzNavigate |
bool RenderFrameHostManager::RequestNavigation( |
- const NavigationEntryImpl& entry, |
- const FrameMsg_Navigate_Params& navigate_params) { |
+ scoped_ptr<NavigationParamsWithRequestAndCommitInfo> navigation_params) { |
CHECK(CommandLine::ForCurrentProcess()->HasSwitch( |
switches::kEnableBrowserSideNavigation)); |
+ DCHECK(navigation_params.get()); |
+ navigation_params_ = navigation_params.Pass(); |
// TODO(clamy): replace RenderViewHost::IsRenderViewLive by |
// RenderFrameHost::IsLive. |
if (render_frame_host_->render_view_host()->IsRenderViewLive()) |
@@ -577,7 +620,7 @@ bool RenderFrameHostManager::RequestNavigation( |
return true; |
// The navigation request is sent directly to the IO thread. |
- OnBeginNavigation(BeginNavigationFromNavigate(navigate_params)); |
+ OnBeginNavigation(MakeDefaultBeginNavigation(*navigation_params_)); |
return true; |
} |
@@ -586,6 +629,9 @@ void RenderFrameHostManager::OnBeginNavigation( |
const FrameHostMsg_BeginNavigation_Params& params) { |
CHECK(CommandLine::ForCurrentProcess()->HasSwitch( |
switches::kEnableBrowserSideNavigation)); |
+ DCHECK(navigation_params_.get()); |
+ navigation_params_->referrer = params.referrer; |
+ navigation_params_->transition = params.transition; |
// TODO(clamy): Check if navigations are blocked and if so, return |
// immediately. |
NavigationRequestInfo info(params); |
@@ -595,6 +641,7 @@ void RenderFrameHostManager::OnBeginNavigation( |
info.is_main_frame = frame_tree_node_->IsMainFrame(); |
info.parent_is_main_frame = !frame_tree_node_->parent() ? |
false : frame_tree_node_->parent()->IsMainFrame(); |
+ info.allow_download = navigation_params_->allow_download; |
// TODO(clamy): Check if the current RFH should be initialized (in case it has |
// crashed) not to display a sad tab while navigating. |
@@ -630,7 +677,7 @@ void RenderFrameHostManager::CommitNavigation( |
SiteInstance* new_instance = GetSiteInstanceForNavigation( |
info.navigation_url, |
NULL, |
- navigation_request_->info().navigation_params.transition_type, |
+ navigation_params_->transition, |
false, |
false); |
DCHECK(!pending_render_frame_host_.get()); |
@@ -662,8 +709,11 @@ void RenderFrameHostManager::CommitNavigation( |
} |
} |
+ DCHECK(navigation_params_.get()); |
+ navigation_params_->url = info.navigation_url; |
frame_tree_node_->navigator()->CommitNavigation( |
- render_frame_host_.get(), info); |
+ render_frame_host_.get(), |
+ MakeCommitNavigationParams(*navigation_params_, info.stream_url)); |
} |
void RenderFrameHostManager::Observe( |