Index: content/browser/frame_host/navigation_handle_impl.cc |
diff --git a/content/browser/frame_host/navigation_handle_impl.cc b/content/browser/frame_host/navigation_handle_impl.cc |
index 7609374b641605ce1dc0313dc564561b658cdeee..f5d52fe881ad79253d9f09a20e0e43efe364b553 100644 |
--- a/content/browser/frame_host/navigation_handle_impl.cc |
+++ b/content/browser/frame_host/navigation_handle_impl.cc |
@@ -15,6 +15,7 @@ |
#include "content/browser/devtools/render_frame_devtools_agent_host.h" |
#include "content/browser/frame_host/ancestor_throttle.h" |
#include "content/browser/frame_host/debug_urls.h" |
+#include "content/browser/frame_host/form_submission_throttle.h" |
#include "content/browser/frame_host/frame_tree_node.h" |
#include "content/browser/frame_host/mixed_content_navigation_throttle.h" |
#include "content/browser/frame_host/navigation_controller_impl.h" |
@@ -66,11 +67,12 @@ std::unique_ptr<NavigationHandleImpl> NavigationHandleImpl::Create( |
const base::TimeTicks& navigation_start, |
int pending_nav_entry_id, |
bool started_from_context_menu, |
- bool should_bypass_main_world_csp) { |
+ bool should_bypass_main_world_csp, |
+ bool is_form_submission) { |
return std::unique_ptr<NavigationHandleImpl>(new NavigationHandleImpl( |
url, redirect_chain, frame_tree_node, is_renderer_initiated, is_same_page, |
navigation_start, pending_nav_entry_id, started_from_context_menu, |
- should_bypass_main_world_csp)); |
+ should_bypass_main_world_csp, is_form_submission)); |
} |
NavigationHandleImpl::NavigationHandleImpl( |
@@ -82,7 +84,8 @@ NavigationHandleImpl::NavigationHandleImpl( |
const base::TimeTicks& navigation_start, |
int pending_nav_entry_id, |
bool started_from_context_menu, |
- bool should_bypass_main_world_csp) |
+ bool should_bypass_main_world_csp, |
+ bool is_form_submission) |
: url_(url), |
has_user_gesture_(false), |
transition_(ui::PAGE_TRANSITION_LINK), |
@@ -113,6 +116,7 @@ NavigationHandleImpl::NavigationHandleImpl( |
restore_type_(RestoreType::NONE), |
navigation_type_(NAVIGATION_TYPE_UNKNOWN), |
should_bypass_main_world_csp_(should_bypass_main_world_csp), |
+ is_form_submission_(is_form_submission), |
weak_factory_(this) { |
DCHECK(!navigation_start.is_null()); |
if (redirect_chain_.empty()) |
@@ -466,6 +470,12 @@ NavigationData* NavigationHandleImpl::GetNavigationData() { |
return navigation_data_.get(); |
} |
+bool NavigationHandleImpl::is_form_submission() const { |
+ DCHECK(IsBrowserSideNavigationEnabled()) |
+ << "This method is implemented only with PlzNavigate"; |
+ return is_form_submission_; |
+} |
+ |
const GlobalRequestID& NavigationHandleImpl::GetGlobalRequestID() { |
DCHECK(state_ == WILL_PROCESS_RESPONSE || state_ == DEFERRING_RESPONSE || |
state_ == READY_TO_COMMIT); |
@@ -915,6 +925,11 @@ void NavigationHandleImpl::RegisterNavigationThrottles() { |
if (ancestor_throttle) |
throttles_.push_back(std::move(ancestor_throttle)); |
+ std::unique_ptr<content::NavigationThrottle> form_submission_throttle = |
+ content::FormSubmissionThrottle::MaybeCreateThrottleFor(this); |
+ if (form_submission_throttle) |
+ throttles_.push_back(std::move(form_submission_throttle)); |
+ |
throttles_.insert(throttles_.begin(), |
std::make_move_iterator(throttles_to_register.begin()), |
std::make_move_iterator(throttles_to_register.end())); |