| 
									
										
										
										
											2022-09-24 14:02:47 +01:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Copyright (c) 2022, Linus Groh <linusg@serenityos.org> | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * SPDX-License-Identifier: BSD-2-Clause | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <AK/Forward.h>
 | 
					
						
							| 
									
										
										
										
											2023-02-25 10:42:45 -07:00
										 |  |  | #include <AK/Optional.h>
 | 
					
						
							| 
									
										
										
										
											2023-12-24 15:53:30 +13:00
										 |  |  | #include <AK/String.h>
 | 
					
						
							| 
									
										
										
										
											2022-09-24 14:02:47 +01:00
										 |  |  | #include <AK/Traits.h>
 | 
					
						
							|  |  |  | #include <LibJS/Forward.h>
 | 
					
						
							| 
									
										
										
										
											2023-02-25 10:42:45 -07:00
										 |  |  | #include <LibJS/Runtime/PropertyKey.h>
 | 
					
						
							| 
									
										
										
										
											2022-09-24 14:02:47 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | namespace Web::HTML { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct CrossOriginProperty { | 
					
						
							| 
									
										
										
										
											2023-12-24 15:53:30 +13:00
										 |  |  |     String property; | 
					
						
							| 
									
										
										
										
											2022-09-24 14:02:47 +01:00
										 |  |  |     Optional<bool> needs_get {}; | 
					
						
							|  |  |  |     Optional<bool> needs_set {}; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct CrossOriginKey { | 
					
						
							| 
									
										
										
										
											2024-10-21 13:35:24 +13:00
										 |  |  |     FlatPtr current_principal_settings_object; | 
					
						
							| 
									
										
										
										
											2022-09-24 14:02:47 +01:00
										 |  |  |     FlatPtr relevant_settings_object; | 
					
						
							|  |  |  |     JS::PropertyKey property_key; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | using CrossOriginPropertyDescriptorMap = HashMap<CrossOriginKey, JS::PropertyDescriptor>; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace AK { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | template<> | 
					
						
							| 
									
										
										
										
											2023-11-08 20:29:12 +01:00
										 |  |  | struct Traits<Web::HTML::CrossOriginKey> : public DefaultTraits<Web::HTML::CrossOriginKey> { | 
					
						
							| 
									
										
										
										
											2022-09-24 14:02:47 +01:00
										 |  |  |     static unsigned hash(Web::HTML::CrossOriginKey const& key) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return pair_int_hash( | 
					
						
							|  |  |  |             Traits<JS::PropertyKey>::hash(key.property_key), | 
					
						
							| 
									
										
										
										
											2024-10-21 13:35:24 +13:00
										 |  |  |             pair_int_hash(ptr_hash(key.current_principal_settings_object), ptr_hash(key.relevant_settings_object))); | 
					
						
							| 
									
										
										
										
											2022-09-24 14:02:47 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     static bool equals(Web::HTML::CrossOriginKey const& a, Web::HTML::CrossOriginKey const& b) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2024-10-21 13:35:24 +13:00
										 |  |  |         return a.current_principal_settings_object == b.current_principal_settings_object | 
					
						
							| 
									
										
										
										
											2022-09-24 14:02:47 +01:00
										 |  |  |             && a.relevant_settings_object == b.relevant_settings_object | 
					
						
							|  |  |  |             && Traits<JS::PropertyKey>::equals(a.property_key, b.property_key); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |