// Copyright 2017 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_REPORTING_REPORTING_HEADER_PARSER_H_
#define NET_REPORTING_REPORTING_HEADER_PARSER_H_

#include <memory>

#include "base/containers/flat_map.h"
#include "base/values.h"
#include "net/base/net_export.h"
#include "net/http/structured_headers.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "url/gurl.h"
#include "url/origin.h"

namespace net {

class IsolationInfo;
class NetworkAnonymizationKey;
class ReportingContext;

// Tries to parse a Reporting-Endpoints header. Returns base::nullopt if parsing
// failed and the header should be ignored; otherwise returns a (possibly
// empty) mapping of endpoint names to URLs.
NET_EXPORT
absl::optional<base::flat_map<std::string, std::string>>
ParseReportingEndpoints(const std::string& header);

class NET_EXPORT ReportingHeaderParser {
 public:
  // These values are persisted to logs. Entries should not be renumbered and
  // numeric values should never be reused.
  // They should also be kept in sync with the NetReportingHeaderType enum
  // in tools/metrics/histograms/enums.xml
  enum class ReportingHeaderType {
    kReportTo = 0,
    kReportToInvalid = 1,
    kReportingEndpoints = 2,
    kReportingEndpointsInvalid = 3,
    kMaxValue = kReportingEndpointsInvalid,
  };

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

  static void ParseReportToHeader(
      ReportingContext* context,
      const NetworkAnonymizationKey& network_anonymization_key,
      const url::Origin& origin,
      const base::Value::List& list);

  // `isolation_info` here will be stored in the cache, associated with the
  // `reporting_source`. `network_anonymization_key` is the NIK which will be
  // passed in with reports to be queued. This must match the NIK from
  // `isolation_source`, unless it is empty (which will be the case if the
  // network state partitioning is disabled).
  static void ProcessParsedReportingEndpointsHeader(
      ReportingContext* context,
      const base::UnguessableToken& reporting_source,
      const IsolationInfo& isolation_info,
      const NetworkAnonymizationKey& network_anonymization_key,
      const url::Origin& origin,
      base::flat_map<std::string, std::string> parsed_header);

  static void RecordReportingHeaderType(ReportingHeaderType header_type);
};

}  // namespace net

#endif  // NET_REPORTING_REPORTING_HEADER_PARSER_H_
