Commit 2c97b6a2 authored by Oleh Lamzin's avatar Oleh Lamzin Committed by Commit Bot

wilco_dtc_supportd: handle unknown mojo enum values

Handle unknown Mojo enum values in PerformRequest function.

BUG=b:129432579
TEST=unit_tests

Change-Id: Ie48643728a1d22b97b135f983ee05f1b78a8af59
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1611600
Commit-Queue: Oleh Lamzin <lamzin@google.com>
Reviewed-by: default avatarMaksim Ivanov <emaxx@chromium.org>
Reviewed-by: default avatarPolina Bondarenko <pbond@chromium.org>
Cr-Commit-Position: refs/heads/master@{#662167}
parent 16f80380
...@@ -45,6 +45,7 @@ std::string GetHttpMethod( ...@@ -45,6 +45,7 @@ std::string GetHttpMethod(
case wilco_dtc_supportd::mojom::WilcoDtcSupportdWebRequestHttpMethod::kPut: case wilco_dtc_supportd::mojom::WilcoDtcSupportdWebRequestHttpMethod::kPut:
return "PUT"; return "PUT";
} }
return "";
} }
// Returns true in case of non-error 2xx HTTP status code. // Returns true in case of non-error 2xx HTTP status code.
...@@ -85,6 +86,18 @@ void WilcoDtcSupportdWebRequestService::PerformRequest( ...@@ -85,6 +86,18 @@ void WilcoDtcSupportdWebRequestService::PerformRequest(
std::vector<base::StringPiece> headers, std::vector<base::StringPiece> headers,
std::string request_body, std::string request_body,
PerformWebRequestCallback callback) { PerformWebRequestCallback callback) {
const std::string http_method_str = GetHttpMethod(http_method);
// Fail with the kNetworkError if http_method_str is empty.
if (http_method_str.empty()) {
LOG(ERROR) << "WilcoDtcSupportd web request http method is unknown: "
<< http_method;
std::move(callback).Run(wilco_dtc_supportd::mojom::
WilcoDtcSupportdWebRequestStatus::kNetworkError,
0 /* http_status */,
mojo::ScopedHandle() /* response_body */);
return;
}
// Fail with the kNetworkError if the queue overflows. // Fail with the kNetworkError if the queue overflows.
if (request_queue_.size() == kWilcoDtcSupportdWebRequestQueueMaxSize) { if (request_queue_.size() == kWilcoDtcSupportdWebRequestQueueMaxSize) {
LOG(ERROR) LOG(ERROR)
...@@ -146,7 +159,7 @@ void WilcoDtcSupportdWebRequestService::PerformRequest( ...@@ -146,7 +159,7 @@ void WilcoDtcSupportdWebRequestService::PerformRequest(
// Create a web request. // Create a web request.
auto request = std::make_unique<WebRequest>(); auto request = std::make_unique<WebRequest>();
request->request = std::make_unique<network::ResourceRequest>(); request->request = std::make_unique<network::ResourceRequest>();
request->request->method = GetHttpMethod(http_method); request->request->method = http_method_str;
request->request->url = std::move(url); request->request->url = std::move(url);
request->request->allow_credentials = false; request->request->allow_credentials = false;
request->request->load_flags = net::LOAD_DISABLE_CACHE; request->request->load_flags = net::LOAD_DISABLE_CACHE;
......
...@@ -137,6 +137,27 @@ class WilcoDtcSupportdWebRequestServiceTest : public testing::Test { ...@@ -137,6 +137,27 @@ class WilcoDtcSupportdWebRequestServiceTest : public testing::Test {
} // namespace } // namespace
TEST_F(WilcoDtcSupportdWebRequestServiceTest, HttpMethodInvalid) {
std::unique_ptr<WebRequestResult> request_result;
base::RunLoop run_loop;
const auto kInvalidHttpMethod = static_cast<
wilco_dtc_supportd::mojom::WilcoDtcSupportdWebRequestHttpMethod>(
static_cast<int>(wilco_dtc_supportd::mojom::
WilcoDtcSupportdWebRequestHttpMethod::kMaxValue) +
1);
StartWebRequest(kInvalidHttpMethod, kFakeUrl, kFakeRequestBody,
&request_result, &run_loop);
// The test fails with a network error on the same thread.
ASSERT_TRUE(request_result);
EXPECT_EQ(request_result->status,
wilco_dtc_supportd::mojom::WilcoDtcSupportdWebRequestStatus::
kNetworkError);
EXPECT_EQ(request_result->http_status, 0);
EXPECT_EQ(request_result->response_body, "");
}
TEST_F(WilcoDtcSupportdWebRequestServiceTest, HttpMethodGetNonEmptyBody) { TEST_F(WilcoDtcSupportdWebRequestServiceTest, HttpMethodGetNonEmptyBody) {
std::unique_ptr<WebRequestResult> request_result; std::unique_ptr<WebRequestResult> request_result;
base::RunLoop run_loop; base::RunLoop run_loop;
......
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