Chromium Code Reviews| 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 240eba7416107135f096249c2f9b94954e080c84..c1c9fa188d2ec12d9c0a015500c089f5f2f60ea9 100644 |
| --- a/content/browser/frame_host/navigation_handle_impl.cc |
| +++ b/content/browser/frame_host/navigation_handle_impl.cc |
| @@ -12,6 +12,7 @@ |
| #include "content/browser/service_worker/service_worker_context_wrapper.h" |
| #include "content/browser/service_worker/service_worker_navigation_handle.h" |
| #include "content/common/frame_messages.h" |
| +#include "content/common/resource_request_body.h" |
| #include "content/public/browser/content_browser_client.h" |
| #include "content/public/common/browser_side_navigation_policy.h" |
| #include "content/public/common/content_client.h" |
| @@ -144,10 +145,10 @@ const base::TimeTicks& NavigationHandleImpl::NavigationStart() { |
| return navigation_start_; |
| } |
| -bool NavigationHandleImpl::IsPost() { |
| +const std::string& NavigationHandleImpl::GetMethod() { |
| CHECK_NE(INITIAL, state_) |
| << "This accessor should not be called before the request is started."; |
| - return method_ == "POST"; |
| + return method_; |
| } |
| const Referrer& NavigationHandleImpl::GetReferrer() { |
| @@ -250,7 +251,21 @@ NavigationHandleImpl::CallWillStartRequestForTesting( |
| ui::PageTransition transition, |
| bool is_external_protocol) { |
| NavigationThrottle::ThrottleCheckResult result = NavigationThrottle::DEFER; |
| - WillStartRequest(is_post ? "POST" : "GET", sanitized_referrer, |
| + |
| + scoped_refptr<ResourceRequestBody> resource_request_body; |
| + std::string method; |
| + if (is_post) { |
| + method = "POST"; |
| + |
| + std::string body = "test=body"; |
| + resource_request_body = new ResourceRequestBody(); |
| + resource_request_body->AppendBytes(body.data(), body.size()); |
| + } else { |
| + method = "GET"; |
|
Charlie Reis
2016/05/31 21:08:36
Maybe we can just initialize |method| to "GET" and
Łukasz Anforowicz
2016/05/31 22:40:55
Done.
|
| + resource_request_body = nullptr; |
| + } |
| + |
| + WillStartRequest(method, resource_request_body, sanitized_referrer, |
| has_user_gesture, transition, is_external_protocol, |
| base::Bind(&UpdateThrottleCheckResult, &result)); |
| @@ -289,13 +304,18 @@ void NavigationHandleImpl::InitServiceWorkerHandle( |
| void NavigationHandleImpl::WillStartRequest( |
| const std::string& method, |
| + const scoped_refptr<content::ResourceRequestBody>& resource_request_body, |
| const Referrer& sanitized_referrer, |
| bool has_user_gesture, |
| ui::PageTransition transition, |
| bool is_external_protocol, |
| const ThrottleChecksFinishedCallback& callback) { |
| + // |method != "POST"| should imply absence of |resource_request_body|. |
| + DCHECK(method == "POST" || !resource_request_body); |
|
Charlie Reis
2016/05/31 21:08:36
Maybe we should upgrade this to a CHECK? Seems li
Łukasz Anforowicz
2016/05/31 22:40:55
Maybe we should try this in a follow-up, smaller (
Charlie Reis
2016/06/01 23:46:32
Sure. Any CHECKs we add can happen in a separate,
Łukasz Anforowicz
2016/06/02 22:07:04
Ack.
|
| + |
| // Update the navigation parameters. |
| method_ = method; |
| + resource_request_body_ = resource_request_body; |
| sanitized_referrer_ = sanitized_referrer; |
| has_user_gesture_ = has_user_gesture; |
| transition_ = transition; |
| @@ -339,6 +359,8 @@ void NavigationHandleImpl::WillRedirectRequest( |
| is_external_protocol_ = new_is_external_protocol; |
| response_headers_ = response_headers; |
| was_redirected_ = true; |
| + if (new_method != "POST") |
| + resource_request_body_ = nullptr; |
| state_ = WILL_REDIRECT_REQUEST; |
| complete_callback_ = callback; |