Commit 7fc24750 authored by Junbo Ke's avatar Junbo Ke Committed by Commit Bot

Update |cors_exempt_headers| when a ResourceRequest is deferred.

Bug: b/139215443
Merge-With: eureka-internal/303498
Test: TBD
Change-Id: I3341a19b74e23ff276b8133e779438b6fc84917b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1753469
Commit-Queue: Junbo Ke <juke@chromium.org>
Reviewed-by: default avatarLuke Halliwell <halliwell@chromium.org>
Reviewed-by: default avatarJohn Abd-El-Malek <jam@chromium.org>
Reviewed-by: default avatarKinuko Yasuda <kinuko@chromium.org>
Cr-Commit-Position: refs/heads/master@{#687337}
parent baa18918
......@@ -43,8 +43,10 @@ bool CastURLLoaderThrottle::makes_unsafe_redirect() {
return true;
}
void CastURLLoaderThrottle::ResumeRequest(int error,
net::HttpRequestHeaders headers) {
void CastURLLoaderThrottle::ResumeRequest(
int error,
net::HttpRequestHeaders headers,
net::HttpRequestHeaders cors_exempt_headers) {
DCHECK(deferred_);
if (error != net::OK) {
NOTREACHED() << "Trying to resume a request with unexpected error: "
......@@ -52,7 +54,7 @@ void CastURLLoaderThrottle::ResumeRequest(int error,
return;
}
deferred_ = false;
delegate_->UpdateDeferredRequestHeaders(headers);
delegate_->UpdateDeferredRequestHeaders(headers, cors_exempt_headers);
delegate_->Resume();
}
......
......@@ -25,7 +25,9 @@ class CastURLLoaderThrottle : public blink::URLLoaderThrottle {
virtual int WillStartResourceRequest(
network::ResourceRequest* request,
const std::string& session_id,
base::OnceCallback<void(int, net::HttpRequestHeaders)> callback) = 0;
base::OnceCallback<void(int,
net::HttpRequestHeaders,
net::HttpRequestHeaders)> callback) = 0;
protected:
virtual ~Delegate() = default;
......@@ -41,7 +43,9 @@ class CastURLLoaderThrottle : public blink::URLLoaderThrottle {
bool* defer) override;
bool makes_unsafe_redirect() override;
void ResumeRequest(int error, net::HttpRequestHeaders headers);
void ResumeRequest(int error,
net::HttpRequestHeaders headers,
net::HttpRequestHeaders cors_exempt_headers);
bool deferred_ = false;
Delegate* const settings_delegate_;
......
......@@ -63,11 +63,14 @@ class ThrottlingURLLoader::ForwardingThrottleDelegate
}
void UpdateDeferredRequestHeaders(
const net::HttpRequestHeaders& modified_request_headers) override {
const net::HttpRequestHeaders& modified_request_headers,
const net::HttpRequestHeaders& modified_cors_exempt_request_headers)
override {
if (!loader_)
return;
ScopedDelegateCall scoped_delegate_call(this);
loader_->UpdateDeferredRequestHeaders(modified_request_headers);
loader_->UpdateDeferredRequestHeaders(modified_request_headers,
modified_cors_exempt_request_headers);
}
void UpdateDeferredResponseHead(
......@@ -788,11 +791,17 @@ void ThrottlingURLLoader::SetPriority(net::RequestPriority priority) {
}
void ThrottlingURLLoader::UpdateDeferredRequestHeaders(
const net::HttpRequestHeaders& modified_request_headers) {
const net::HttpRequestHeaders& modified_request_headers,
const net::HttpRequestHeaders& modified_cors_exempt_request_headers) {
if (deferred_stage_ == DEFERRED_START) {
start_info_->url_request.headers.MergeFrom(modified_request_headers);
start_info_->url_request.cors_exempt_headers.MergeFrom(
modified_cors_exempt_request_headers);
} else if (deferred_stage_ == DEFERRED_REDIRECT) {
modified_headers_.MergeFrom(modified_request_headers);
// TODO(juke): Figure out if we need to support |cors_exempt_headers| in
// DEFERRED_REDIRECT case.
modified_headers_.MergeFrom(modified_cors_exempt_request_headers);
} else {
NOTREACHED()
<< "Can only update headers of a request before it's sent out.";
......
......@@ -140,7 +140,8 @@ class CONTENT_EXPORT ThrottlingURLLoader
void Resume();
void SetPriority(net::RequestPriority priority);
void UpdateDeferredRequestHeaders(
const net::HttpRequestHeaders& modified_request_headers);
const net::HttpRequestHeaders& modified_request_headers,
const net::HttpRequestHeaders& modified_cors_exempt_request_headers);
void UpdateDeferredResponseHead(
const network::ResourceResponseHead& new_response_head);
void PauseReadingBodyFromNet(blink::URLLoaderThrottle* throttle);
......
......@@ -480,13 +480,18 @@ TEST_F(ThrottlingURLLoaderTest, ModifyHeaderInResumeBeforeStart) {
const network::ResourceRequest& url_request) {
EXPECT_EQ("X-Test-Header-1: Foo\r\n\r\n",
url_request.headers.ToString());
EXPECT_EQ("X-Test-Header-2: Bar\r\n\r\n",
url_request.cors_exempt_headers.ToString());
quit_closure.Run();
},
run_loop.QuitClosure()));
net::HttpRequestHeaders modified_headers;
net::HttpRequestHeaders modified_cors_exempt_headers;
modified_headers.SetHeader("X-Test-Header-1", "Foo");
throttle_->delegate()->UpdateDeferredRequestHeaders(modified_headers);
modified_cors_exempt_headers.SetHeader("X-Test-Header-2", "Bar");
throttle_->delegate()->UpdateDeferredRequestHeaders(
modified_headers, modified_cors_exempt_headers);
throttle_->delegate()->Resume();
run_loop.Run();
......@@ -669,8 +674,11 @@ TEST_F(ThrottlingURLLoaderTest, ModifyHeaderInResumeBeforeRedirect) {
run_loop1.Run();
net::HttpRequestHeaders modified_headers;
net::HttpRequestHeaders modified_cors_exempt_headers;
modified_headers.SetHeader("X-Test-Header-1", "Foo");
throttle_->delegate()->UpdateDeferredRequestHeaders(modified_headers);
modified_cors_exempt_headers.SetHeader("X-Test-Header-2", "Bar");
throttle_->delegate()->UpdateDeferredRequestHeaders(
modified_headers, modified_cors_exempt_headers);
throttle_->delegate()->Resume();
loader_->FollowRedirect({}, {});
......@@ -678,8 +686,10 @@ TEST_F(ThrottlingURLLoaderTest, ModifyHeaderInResumeBeforeRedirect) {
base::RunLoop run_loop2;
run_loop2.RunUntilIdle();
EXPECT_EQ("X-Test-Header-1: Foo\r\n\r\n",
factory_.headers_modified_on_redirect().ToString());
EXPECT_EQ(
"X-Test-Header-1: Foo\r\n"
"X-Test-Header-2: Bar\r\n\r\n",
factory_.headers_modified_on_redirect().ToString());
}
TEST_F(ThrottlingURLLoaderTest, MultipleThrottlesModifyHeadersBeforeRedirect) {
......
......@@ -10,7 +10,8 @@ namespace blink {
void URLLoaderThrottle::Delegate::SetPriority(net::RequestPriority priority) {}
void URLLoaderThrottle::Delegate::UpdateDeferredRequestHeaders(
const net::HttpRequestHeaders& modified_request_headers) {}
const net::HttpRequestHeaders& modified_request_headers,
const net::HttpRequestHeaders& modified_cors_exempt_request_headers) {}
void URLLoaderThrottle::Delegate::UpdateDeferredResponseHead(
const network::ResourceResponseHead& new_response_head) {}
void URLLoaderThrottle::Delegate::PauseReadingBodyFromNet() {}
......
......@@ -60,7 +60,8 @@ class BLINK_COMMON_EXPORT URLLoaderThrottle {
// needs to be called when the response is deferred on WillStartRequest or
// WillRedirectRequest and before calling Delegate::Resume().
virtual void UpdateDeferredRequestHeaders(
const net::HttpRequestHeaders& modified_request_headers);
const net::HttpRequestHeaders& modified_request_headers,
const net::HttpRequestHeaders& modified_cors_exempt_request_headers);
// Updates the response head which is deferred to be sent. This method needs
// to be called when the response is deferred on
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment