mirror of
				https://github.com/LadybirdBrowser/ladybird.git
				synced 2025-11-02 22:30:58 +00:00 
			
		
		
		
	This follows the implementation method that was used for the implementation of ISO8601 parsing for Temporal in LibJS. Doing it this way allows us to have state transactions, and thus pick out individual parse nodes that the specification steps want to use.
		
			
				
	
	
		
			35 lines
		
	
	
	
		
			760 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
	
		
			760 B
		
	
	
	
		
			C++
		
	
	
	
	
	
/*
 | 
						|
 * Copyright (c) 2025, Luke Wilde <luke@ladybird.org>
 | 
						|
 *
 | 
						|
 * SPDX-License-Identifier: BSD-2-Clause
 | 
						|
 */
 | 
						|
 | 
						|
#pragma once
 | 
						|
 | 
						|
#include <AK/Optional.h>
 | 
						|
#include <AK/StringView.h>
 | 
						|
#include <AK/Vector.h>
 | 
						|
 | 
						|
namespace Web::ContentSecurityPolicy::Directives {
 | 
						|
 | 
						|
struct SourceExpressionParseResult {
 | 
						|
    Optional<StringView> scheme_part;
 | 
						|
    Optional<StringView> host_part;
 | 
						|
    Optional<StringView> port_part;
 | 
						|
    Optional<StringView> path_part;
 | 
						|
    Optional<StringView> keyword_source;
 | 
						|
    Optional<StringView> base64_value;
 | 
						|
    Optional<StringView> hash_algorithm;
 | 
						|
};
 | 
						|
 | 
						|
enum class Production {
 | 
						|
    SchemeSource,
 | 
						|
    HostSource,
 | 
						|
    KeywordSource,
 | 
						|
    NonceSource,
 | 
						|
    HashSource,
 | 
						|
};
 | 
						|
 | 
						|
Optional<SourceExpressionParseResult> parse_source_expression(Production, StringView);
 | 
						|
 | 
						|
}
 |