ladybird/Libraries/LibWeb/Fetch/Infrastructure/NetworkPartitionKey.cpp

48 lines
1.8 KiB
C++
Raw Normal View History

/*
* Copyright (c) 2024, Andrew Kaster <akaster@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <LibWeb/Fetch/Infrastructure/NetworkPartitionKey.h>
#include <LibWeb/Fetch/Request.h>
namespace Web::Fetch::Infrastructure {
// https://fetch.spec.whatwg.org/#determine-the-network-partition-key
NetworkPartitionKey determine_the_network_partition_key(HTML::Environment const& environment)
{
// 1. Let topLevelOrigin be environments top-level origin.
auto top_level_origin = environment.top_level_origin;
// 2. If topLevelOrigin is null, then set topLevelOrigin to environments top-level creation URLs origin
if (!top_level_origin.has_value())
top_level_origin = environment.top_level_creation_url->origin();
// 3. Assert: topLevelOrigin is an origin.
// FIXME: 4. Let topLevelSite be the result of obtaining a site, given topLevelOrigin.
// 5. Let secondKey be null or an implementation-defined value.
void* second_key = nullptr;
// 6. Return (topLevelSite, secondKey).
return { top_level_origin.release_value(), second_key };
}
// https://fetch.spec.whatwg.org/#request-determine-the-network-partition-key
Optional<NetworkPartitionKey> determine_the_network_partition_key(Infrastructure::Request const& request)
{
// 1. If requests reserved client is non-null, then return the result of determining the network partition key given requests reserved client.
if (auto reserved_client = request.reserved_client())
return determine_the_network_partition_key(*reserved_client);
// 2. If requests client is non-null, then return the result of determining the network partition key given requests client.
if (auto client = request.client())
return determine_the_network_partition_key(*client);
return {};
}
}