blob: e1aaa296f0fb7ac7bd9e9676ecd3ef4f2b0c16ab [file] [log] [blame]
// Copyright 2021 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SERVICES_NETWORK_PUBLIC_CPP_LINK_HEADER_PARSER_H_
#define SERVICES_NETWORK_PUBLIC_CPP_LINK_HEADER_PARSER_H_
#include <vector>
#include "base/component_export.h"
#include "base/optional.h"
#include "services/network/public/mojom/link_header.mojom.h"
#include "url/gurl.h"
namespace net {
class HttpResponseHeaders;
}
namespace network {
// Parses Link headers and returns the parsed representations of them. The
// parsed representations are used to pass Link headers between processes.
//
// A parsed representation does not contain all attributes and values of the
// original Link header. It only populates pre-defined attributes/values. See
// mojom::LinkHeader for pre-defined attributes and values.
//
// When an attribute is specified more than once the first one is parsed. The
// second and subsequent ones are ignored.
//
// The number of parsed representations can be different from the number of
// Link headers in `headers`. The parser ignores a Link header in the following
// situations to avoid processing unknown inputs:
// * Any error occurs while parsing.
// * Resolving the value of `href` fails.
// * The `rel` attribute is not specified.
// * The header contains an attribute which isn't pre-defined.
// * The header contains an attribute of which value isn't pre-defined.
COMPONENT_EXPORT(NETWORK_CPP)
std::vector<mojom::LinkHeaderPtr> ParseLinkHeaders(
const net::HttpResponseHeaders& headers,
const GURL& base_url);
} // namespace network
#endif // SERVICES_NETWORK_PUBLIC_CPP_LINK_HEADER_PARSER_H_