download_http_utils.cc 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. // Copyright 2021 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "components/download/network/download_http_utils.h"
  5. #include "net/http/http_byte_range.h"
  6. #include "net/http/http_request_headers.h"
  7. #include "net/http/http_util.h"
  8. namespace download {
  9. absl::optional<net::HttpByteRange> ParseRangeHeader(
  10. const net::HttpRequestHeaders& request_headers) {
  11. std::vector<net::HttpByteRange> byte_ranges;
  12. std::string range_header;
  13. bool success =
  14. request_headers.GetHeader(net::HttpRequestHeaders::kRange, &range_header);
  15. if (!success)
  16. return absl::nullopt;
  17. success = net::HttpUtil::ParseRangeHeader(range_header, &byte_ranges);
  18. // Multiple ranges are not supported.
  19. if (!success || byte_ranges.empty() || byte_ranges.size() > 1)
  20. return absl::nullopt;
  21. return byte_ranges.front();
  22. }
  23. bool ValidateRequestHeaders(const net::HttpRequestHeaders& request_headers) {
  24. if (request_headers.HasHeader(net::HttpRequestHeaders::kRange)) {
  25. return ParseRangeHeader(request_headers).has_value();
  26. }
  27. return true;
  28. }
  29. } // namespace download