#ifndef SERVICES_NETWORK_PUBLIC_CPP_CLIENT_HINTS_H_
#define SERVICES_NETWORK_PUBLIC_CPP_CLIENT_HINTS_H_
#include <stddef.h>
#include <array>
#include <optional>
#include <string>
#include "base/component_export.h"
#include "base/containers/flat_map.h"
#include "base/time/time.h"
#include "net/nqe/effective_connection_type.h"
#include "services/network/public/mojom/web_client_hints_types.mojom-shared.h"
namespace url {
class Origin;
}
namespace network {
COMPONENT_EXPORT(NETWORK_CPP_WEB_PLATFORM)
extern const char kPrefersColorSchemeDark[];
COMPONENT_EXPORT(NETWORK_CPP_WEB_PLATFORM)
extern const char kPrefersColorSchemeLight[];
COMPONENT_EXPORT(NETWORK_CPP_WEB_PLATFORM)
extern const char kPrefersReducedMotionNoPreference[];
COMPONENT_EXPORT(NETWORK_CPP_WEB_PLATFORM)
extern const char kPrefersReducedMotionReduce[];
COMPONENT_EXPORT(NETWORK_CPP_WEB_PLATFORM)
extern const char kPrefersReducedTransparencyNoPreference[];
COMPONENT_EXPORT(NETWORK_CPP_WEB_PLATFORM)
extern const char kPrefersReducedTransparencyReduce[];
inline constexpr auto kWebEffectiveConnectionTypeMapping =
std::to_array<const char*>({
"4g" ,
"4g" ,
"slow-2g" ,
"2g" ,
"3g" ,
"4g" ,
});
static_assert(network::kWebEffectiveConnectionTypeMapping.size() ==
net::EFFECTIVE_CONNECTION_TYPE_4G + 1u);
static_assert(network::kWebEffectiveConnectionTypeMapping.size() ==
static_cast<size_t>(net::EFFECTIVE_CONNECTION_TYPE_LAST));
using ClientHintToNameMap =
base::flat_map<network::mojom::WebClientHintsType, std::string>;
COMPONENT_EXPORT(NETWORK_CPP_WEB_PLATFORM)
const ClientHintToNameMap& GetClientHintToNameMap();
std::optional<std::vector<network::mojom::WebClientHintsType>> COMPONENT_EXPORT(
NETWORK_CPP_WEB_PLATFORM) ParseClientHintsHeader(const std::string& header);
struct COMPONENT_EXPORT(NETWORK_CPP_WEB_PLATFORM)
ClientHintToDelegatedThirdPartiesHeader {
ClientHintToDelegatedThirdPartiesHeader();
~ClientHintToDelegatedThirdPartiesHeader();
ClientHintToDelegatedThirdPartiesHeader(
const ClientHintToDelegatedThirdPartiesHeader&);
base::flat_map<network::mojom::WebClientHintsType, std::vector<url::Origin>>
map;
bool had_invalid_origins{false};
};
enum class MetaCHType {
HttpEquivAcceptCH,
HttpEquivDelegateCH,
};
const ClientHintToDelegatedThirdPartiesHeader COMPONENT_EXPORT(
NETWORK_CPP_WEB_PLATFORM)
ParseClientHintToDelegatedThirdPartiesHeader(const std::string& header,
MetaCHType type);
void COMPONENT_EXPORT(NETWORK_CPP_WEB_PLATFORM)
LogClientHintsPersistenceMetrics(const base::TimeTicks& persistence_started,
std::size_t hints_stored);
}
#endif