File: http_cache_util.h

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (71 lines) | stat: -rw-r--r-- 2,527 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef NET_HTTP_HTTP_CACHE_UTIL_H_
#define NET_HTTP_HTTP_CACHE_UTIL_H_

#include <array>
#include <optional>
#include <string_view>

#include "base/types/expected.h"

namespace net {

class HttpRequestHeaders;
class HttpResponseHeaders;

namespace http_cache_util {

// Determines cache-related load flags based on the provided HTTP request
// headers.
//
// This function inspects `extra_headers` for patterns implying specific cache
// behaviors (e.g., "Cache-Control: no-cache", "If-Match"). It can return
// flags like LOAD_DISABLE_CACHE, LOAD_BYPASS_CACHE, or LOAD_VALIDATE_CACHE.
//
// Returns an int representing the determined load flags , or 0 (LOAD_NORMAL) if
// no special cache-related headers are found.
int GetLoadFlagsForExtraHeaders(const HttpRequestHeaders& extra_headers);

// Manages HTTP validation headers (e.g., If-Modified-Since, If-None-Match)
// provided in a request. It can parse them from HttpRequestHeaders and
// match them against HttpResponseHeaders.
class ValidationHeaders {
 public:
  // Attempts to create a ValidationHeaders object by parsing
  // "If-Modified-Since" and "If-None-Match" headers from the provided
  // `extra_headers`. Returns an ValidationHeaders if one or more valid
  // validation headers are found. Returns std::nullopt if no relevant headers
  // are present. Returns base::unexpected on error (e.g., an empty header
  // value).
  static base::expected<std::optional<ValidationHeaders>, std::string_view>
  MaybeCreate(const HttpRequestHeaders& extra_headers);

  ~ValidationHeaders();

  ValidationHeaders(const ValidationHeaders&) = delete;
  ValidationHeaders& operator=(const ValidationHeaders&) = delete;

  ValidationHeaders(ValidationHeaders&&);
  ValidationHeaders& operator=(ValidationHeaders&&);

  // Checks if the provided `response_headers` satisfy the validation
  // conditions. This compares stored "If-Modified-Since" with "Last-Modified"
  // and "If-None-Match" with "ETag" from the `response_headers`.
  bool Match(const HttpResponseHeaders& response_headers) const;

 private:
  static const size_t kNumValidationHeaders = 2;
  using ValidationHeaderValues = std::array<std::string, kNumValidationHeaders>;

  explicit ValidationHeaders(ValidationHeaderValues values);

  ValidationHeaderValues values_;
};

}  // namespace http_cache_util
}  // namespace net

#endif  // NET_HTTP_HTTP_CACHE_UTIL_H_