mirror of
				https://github.com/LadybirdBrowser/ladybird.git
				synced 2025-10-31 13:20:59 +00:00 
			
		
		
		
	 937994cfaa
			
		
	
	
		937994cfaa
		
	
	
	
	
		
			
			This matches the definition in the spec, and is also a step towards removing the default constructor of URL::Origin.
		
			
				
	
	
		
			47 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | ||
|  * 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 environment’s top-level origin.
 | ||
|     auto top_level_origin = environment.top_level_origin;
 | ||
| 
 | ||
|     // 2. If topLevelOrigin is null, then set topLevelOrigin to environment’s top-level creation URL’s 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 request’s reserved client is non-null, then return the result of determining the network partition key given request’s reserved client.
 | ||
|     if (auto reserved_client = request.reserved_client())
 | ||
|         return determine_the_network_partition_key(*reserved_client);
 | ||
| 
 | ||
|     // 2. If request’s client is non-null, then return the result of determining the network partition key given request’s client.
 | ||
|     if (auto client = request.client())
 | ||
|         return determine_the_network_partition_key(*client);
 | ||
| 
 | ||
|     return {};
 | ||
| }
 | ||
| 
 | ||
| }
 |