mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 07:52:45 +00:00 
			
		
		
		
	LibWeb: Add facilities to serialize EnvironmentSettingsObjects
This will be used to transfer information about the parent context to DedicatedWorkers and future out-of-process Worker/Worklet implementations for fetching purposes. In order to properly check same-origin and other policies, we need to know more about the outside settings than we were previously passing to the WebWorker process.
This commit is contained in:
		
							parent
							
								
									c79bac70f4
								
							
						
					
					
						commit
						4d22358e05
					
				
					 11 changed files with 198 additions and 5 deletions
				
			
		|  | @ -0,0 +1,47 @@ | |||
| /*
 | ||||
|  * Copyright (c) 2024, Andrew Kaster <akaster@serenityos.org> | ||||
|  * | ||||
|  * SPDX-License-Identifier: BSD-2-Clause | ||||
|  */ | ||||
| 
 | ||||
| #include <LibIPC/Decoder.h> | ||||
| #include <LibIPC/Encoder.h> | ||||
| #include <LibWeb/HTML/Scripting/SerializedEnvironmentSettingsObject.h> | ||||
| 
 | ||||
| namespace IPC { | ||||
| 
 | ||||
| template<> | ||||
| ErrorOr<void> encode(Encoder& encoder, Web::HTML::SerializedEnvironmentSettingsObject const& object) | ||||
| { | ||||
|     TRY(encoder.encode(object.id)); | ||||
|     TRY(encoder.encode(object.creation_url)); | ||||
|     TRY(encoder.encode(object.top_level_creation_url)); | ||||
|     TRY(encoder.encode(object.top_level_origin)); | ||||
|     TRY(encoder.encode(object.api_url_character_encoding)); | ||||
|     TRY(encoder.encode(object.api_base_url)); | ||||
|     TRY(encoder.encode(object.origin)); | ||||
|     TRY(encoder.encode(object.policy_container)); | ||||
|     TRY(encoder.encode(object.cross_origin_isolated_capability)); | ||||
| 
 | ||||
|     return {}; | ||||
| } | ||||
| 
 | ||||
| template<> | ||||
| ErrorOr<Web::HTML::SerializedEnvironmentSettingsObject> decode(Decoder& decoder) | ||||
| { | ||||
|     Web::HTML::SerializedEnvironmentSettingsObject object {}; | ||||
| 
 | ||||
|     object.id = TRY(decoder.decode<String>()); | ||||
|     object.creation_url = TRY(decoder.decode<URL>()); | ||||
|     object.top_level_creation_url = TRY(decoder.decode<URL>()); | ||||
|     object.top_level_origin = TRY(decoder.decode<Web::HTML::Origin>()); | ||||
|     object.api_url_character_encoding = TRY(decoder.decode<String>()); | ||||
|     object.api_base_url = TRY(decoder.decode<URL>()); | ||||
|     object.origin = TRY(decoder.decode<Web::HTML::Origin>()); | ||||
|     object.policy_container = TRY(decoder.decode<Web::HTML::PolicyContainer>()); | ||||
|     object.cross_origin_isolated_capability = TRY(decoder.decode<Web::HTML::CanUseCrossOriginIsolatedAPIs>()); | ||||
| 
 | ||||
|     return object; | ||||
| } | ||||
| 
 | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andrew Kaster
						Andrew Kaster