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

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: Split the class into structs used by IPCs Created 6 years, 3 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 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(

Powered by Google App Engine
This is Rietveld 408576698