blob: 57a921838839f323215a31187beedb664d0c51f0 [file] [log] [blame]
// 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.
#include "services/network/request_header_to_enum.h"
#include "base/containers/fixed_flat_map.h"
#include "base/metrics/histogram_functions.h"
namespace network {
namespace {
constexpr auto kHeaderMap =
base::MakeFixedFlatMap<std::string_view, RequestHeader>({
{"accept", RequestHeader::kAccept},
{"accept-encoding", RequestHeader::kAcceptEncoding},
{"accept-language", RequestHeader::kAcceptLanguage},
{"authorization", RequestHeader::kAuthorization},
{"cache-control", RequestHeader::kCacheControl},
{"client-version", RequestHeader::kClientVersion},
{"content-encoding", RequestHeader::kContentEncoding},
{"content-type", RequestHeader::kContentType},
{"device-memory", RequestHeader::kDeviceMemory},
{"downlink", RequestHeader::kDownlink},
{"dpr", RequestHeader::kDpr},
{"ect", RequestHeader::kEct},
{"google-translate-element-mode",
RequestHeader::kGoogleTranslateElementMode},
{"if-modified-since", RequestHeader::kIfModifiedSince},
{"if-none-match", RequestHeader::kIfNoneMatch},
{"origin", RequestHeader::kOrigin},
{"ping-from", RequestHeader::kPingFrom},
{"ping-to", RequestHeader::kPingTo},
{"pragma", RequestHeader::kPragma},
{"range", RequestHeader::kRange},
{"request-id", RequestHeader::kRequestId},
{"rtt", RequestHeader::kRtt},
{"sec-browsing-topics", RequestHeader::kSecBrowsingTopics},
{"sec-ch-device-memory", RequestHeader::kSecChDeviceMemory},
{"sec-ch-dpr", RequestHeader::kSecChDpr},
{"sec-ch-prefers-color-scheme",
RequestHeader::kSecChPrefersColorScheme},
{"sec-ch-ua", RequestHeader::kSecChUa},
{"sec-ch-ua-arch", RequestHeader::kSecChUaArch},
{"sec-ch-ua-bitness", RequestHeader::kSecChUaBitness},
{"sec-ch-ua-form-factors", RequestHeader::kSecChUaFormFactors},
{"sec-ch-ua-full-version", RequestHeader::kSecChUaFullVersion},
{"sec-ch-ua-full-version-list", RequestHeader::kSecChUaFullVersionList},
{"sec-ch-ua-mobile", RequestHeader::kSecChUaMobile},
{"sec-ch-ua-model", RequestHeader::kSecChUaModel},
{"sec-ch-ua-platform", RequestHeader::kSecChUaPlatform},
{"sec-ch-ua-platform-version", RequestHeader::kSecChUaPlatformVersion},
{"sec-ch-ua-wow64", RequestHeader::kSecChUaWow64},
{"sec-ch-viewport-height", RequestHeader::kSecChViewportHeight},
{"sec-ch-viewport-width", RequestHeader::kSecChViewportWidth},
{"sec-purpose", RequestHeader::kSecPurpose},
{"service-worker", RequestHeader::kServiceWorker},
{"service-worker-navigation-preload",
RequestHeader::kServiceWorkerNavigationPreload},
{"sid", RequestHeader::kSID},
{"traceparent", RequestHeader::kTraceparent},
{"upgrade-insecure-requests", RequestHeader::kUpgradeInsecureRequests},
{"user-agent", RequestHeader::kUserAgent},
{"viewport-width", RequestHeader::kViewportWidth},
{"x-chrome-connected", RequestHeader::kXChromeConnected},
{"x-chrome-id-consistency-request",
RequestHeader::kXChromeIDConsistencyRequest},
{"x-client-data", RequestHeader::kXClientData},
{"x-developer-key", RequestHeader::kXDeveloperKey},
{"x-goog-api-key", RequestHeader::kXGoogApiKey},
{"x-goog-encode-response-if-executable",
RequestHeader::kXGoogEncodeResponseIfExecutable},
{"x-goog-ext-174067345-bin", RequestHeader::kXGoogExt174067345Bin},
{"x-goog-update-appid", RequestHeader::kXGoogUpdateAppId},
{"x-goog-update-interactivity",
RequestHeader::kXGoogUpdateInteractivity},
{"x-goog-update-updater", RequestHeader::kXGoogUpdateUpdater},
{"x-http-method-override", RequestHeader::kXHTTPMethodOverride},
{"x-oauth-client-id", RequestHeader::kXOAuthClientID},
{"x-requested-with", RequestHeader::kXRequestedWith},
{"x-server-timeout", RequestHeader::kXServerTimeout},
{"x-use-alt-service", RequestHeader::kXUseAltService},
{"x-webchannel-content-type", RequestHeader::kXWebChannelContentType},
});
} // namespace
RequestHeader LowerCaseRequestHeaderToEnum(std::string_view name) {
auto it = kHeaderMap.find(name);
if (it != kHeaderMap.end()) {
return it->second;
}
return RequestHeader::kOther;
}
void LogLowerCaseRequestHeaderToUma(std::string_view histogram_name,
std::string_view header_name) {
base::UmaHistogramEnumeration(histogram_name,
LowerCaseRequestHeaderToEnum(header_name));
}
} // namespace network