blob: 384411ae3240d6f7dada422fe7cffe2c13523f9d [file] [log] [blame]
// Copyright 2019 The Chromium Authors
// 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_REQUEST_DESTINATION_H_
#define SERVICES_NETWORK_PUBLIC_CPP_REQUEST_DESTINATION_H_
#include <optional>
#include <string_view>
#include "base/component_export.h"
#include "services/network/public/mojom/fetch_api.mojom-shared.h"
namespace network {
// Options for the choice of handling empty string for
// RequestDestination::kEmpty.
// See https://crbug.com/1121493 for handing empty destination
enum class EmptyRequestDestinationOption {
kUseTheEmptyString, // Use ""
kUseFiveCharEmptyString // Use "empty"
};
// Returns a string corresponding to the |dest| as defined in the spec:
// https://fetch.spec.whatwg.org/#concept-request-destination.
// When kUseFiveCharEmptyString option is used, returns "empty" instead of ""
// for RequestDestination::kEmpty.
COMPONENT_EXPORT(NETWORK_CPP)
const char* RequestDestinationToString(
network::mojom::RequestDestination dest,
EmptyRequestDestinationOption option =
EmptyRequestDestinationOption::kUseTheEmptyString);
// Returns a RequestDestination corresponding to the |dest_str| as defined in
// the spec: https://fetch.spec.whatwg.org/#concept-request-destination. If
// |dest_str| is not a valid RequestDestination, returns nullopt.
// When kUseFiveCharEmptyString option is used, "empty" is accepted for
// RequestDestination::kEmpty. But the empty string "" is not accepted.
COMPONENT_EXPORT(NETWORK_CPP)
std::optional<network::mojom::RequestDestination> RequestDestinationFromString(
std::string_view dest_str,
EmptyRequestDestinationOption option =
EmptyRequestDestinationOption::kUseTheEmptyString);
// Returns a string representation of the `destination` for histogram recording.
// This just calls RequestDestinationToString() with kUseFiveCharEmptyString
// option.
COMPONENT_EXPORT(NETWORK_CPP)
const char* RequestDestinationToStringForHistogram(
network::mojom::RequestDestination dest);
// Returns whether the destination is a frame embedded in the document.
COMPONENT_EXPORT(NETWORK_CPP)
bool IsRequestDestinationEmbeddedFrame(network::mojom::RequestDestination dest);
} // namespace network
#endif // SERVICES_NETWORK_PUBLIC_CPP_REQUEST_DESTINATION_H_