Commit 5321036d authored by Kenichi Ishibashi's avatar Kenichi Ishibashi Committed by Commit Bot

service worker: Separate CreateHttpResponseInfoAndCheckHeaders

This CL moves header checks from
CreateHttpResponseInfoAndCheckHeaders() into a separate function.
This is a preparation to remove HttpResponseInfo dependencies from
ServiceWorkerNewScriptLoader and
ServiceWorkerSingleScriptUpdateChecker. These classes will stop
converting URLResponseHead but still need to check headers.


Bug: 1060076
Change-Id: I1484e2523f42e8e7779b06f0be6cb0119de6101f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2107032
Auto-Submit: Kenichi Ishibashi <bashi@chromium.org>
Commit-Queue: Hiroki Nakagawa <nhiroki@chromium.org>
Reviewed-by: default avatarHiroki Nakagawa <nhiroki@chromium.org>
Cr-Commit-Position: refs/heads/master@{#752362}
parent b3427104
...@@ -17,7 +17,7 @@ namespace content { ...@@ -17,7 +17,7 @@ namespace content {
namespace service_worker_loader_helpers { namespace service_worker_loader_helpers {
std::unique_ptr<net::HttpResponseInfo> CreateHttpResponseInfoAndCheckHeaders( bool CheckResponseHead(
const network::mojom::URLResponseHead& response_head, const network::mojom::URLResponseHead& response_head,
blink::ServiceWorkerStatusCode* out_service_worker_status, blink::ServiceWorkerStatusCode* out_service_worker_status,
network::URLLoaderCompletionStatus* out_completion_status, network::URLLoaderCompletionStatus* out_completion_status,
...@@ -30,7 +30,7 @@ std::unique_ptr<net::HttpResponseInfo> CreateHttpResponseInfoAndCheckHeaders( ...@@ -30,7 +30,7 @@ std::unique_ptr<net::HttpResponseInfo> CreateHttpResponseInfoAndCheckHeaders(
ServiceWorkerConsts::kServiceWorkerBadHTTPResponseError, ServiceWorkerConsts::kServiceWorkerBadHTTPResponseError,
response_head.headers->response_code()); response_head.headers->response_code());
*out_service_worker_status = blink::ServiceWorkerStatusCode::kErrorNetwork; *out_service_worker_status = blink::ServiceWorkerStatusCode::kErrorNetwork;
return nullptr; return false;
} }
if (net::IsCertStatusError(response_head.cert_status) && if (net::IsCertStatusError(response_head.cert_status) &&
...@@ -40,7 +40,7 @@ std::unique_ptr<net::HttpResponseInfo> CreateHttpResponseInfoAndCheckHeaders( ...@@ -40,7 +40,7 @@ std::unique_ptr<net::HttpResponseInfo> CreateHttpResponseInfoAndCheckHeaders(
net::MapCertStatusToNetError(response_head.cert_status)); net::MapCertStatusToNetError(response_head.cert_status));
*out_error_message = ServiceWorkerConsts::kServiceWorkerSSLError; *out_error_message = ServiceWorkerConsts::kServiceWorkerSSLError;
*out_service_worker_status = blink::ServiceWorkerStatusCode::kErrorNetwork; *out_service_worker_status = blink::ServiceWorkerStatusCode::kErrorNetwork;
return nullptr; return false;
} }
// Remain consistent with logic in // Remain consistent with logic in
...@@ -57,6 +57,19 @@ std::unique_ptr<net::HttpResponseInfo> CreateHttpResponseInfoAndCheckHeaders( ...@@ -57,6 +57,19 @@ std::unique_ptr<net::HttpResponseInfo> CreateHttpResponseInfoAndCheckHeaders(
ServiceWorkerConsts::kServiceWorkerBadMIMEError, ServiceWorkerConsts::kServiceWorkerBadMIMEError,
response_head.mime_type.c_str()); response_head.mime_type.c_str());
*out_service_worker_status = blink::ServiceWorkerStatusCode::kErrorSecurity; *out_service_worker_status = blink::ServiceWorkerStatusCode::kErrorSecurity;
return false;
}
return true;
}
std::unique_ptr<net::HttpResponseInfo> CreateHttpResponseInfoAndCheckHeaders(
const network::mojom::URLResponseHead& response_head,
blink::ServiceWorkerStatusCode* out_service_worker_status,
network::URLLoaderCompletionStatus* out_completion_status,
std::string* out_error_message) {
if (!CheckResponseHead(response_head, out_service_worker_status,
out_completion_status, out_error_message)) {
return nullptr; return nullptr;
} }
......
...@@ -26,9 +26,19 @@ namespace content { ...@@ -26,9 +26,19 @@ namespace content {
namespace service_worker_loader_helpers { namespace service_worker_loader_helpers {
// Creates net::HttpResponseInfo from |response_head|. If |response_head| is // Check if |response_head| is a valid response for a service worker script
// invalid as a service worker script (e.g. bad mime type), returns nullptr and // (e.g. bad mime type). Status codes and error message will be set when the
// sets error code and a message. // response is invalid.
bool CheckResponseHead(
const network::mojom::URLResponseHead& response_head,
blink::ServiceWorkerStatusCode* out_service_worker_status,
network::URLLoaderCompletionStatus* out_completion_status,
std::string* out_error_message);
// Creates net::HttpResponseInfo from |response_head|. Returns nullptr when the
// response is invalid.
// TODO(crbug.com/1060076): Remove this once HttpResponseInfo dependencies are
// gone.
std::unique_ptr<net::HttpResponseInfo> CreateHttpResponseInfoAndCheckHeaders( std::unique_ptr<net::HttpResponseInfo> CreateHttpResponseInfoAndCheckHeaders(
const network::mojom::URLResponseHead& response_head, const network::mojom::URLResponseHead& response_head,
blink::ServiceWorkerStatusCode* out_service_worker_status, blink::ServiceWorkerStatusCode* out_service_worker_status,
......
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