mirror of
				https://github.com/LadybirdBrowser/ladybird.git
				synced 2025-10-31 21:30:58 +00:00 
			
		
		
		
	 84b9224121
			
		
	
	
		84b9224121
		
	
	
	
	
		
			
			This change follows the pattern of our cookies persistence implementation: the "browser" process is responsible for interacting with the sqlite database, and WebContent communicates all storage operations via IPC. The new database table uses (storage_endpoint, storage_key, bottle_key) as the primary key. This design follows concepts from the https://storage.spec.whatwg.org/ and is intended to support reuse of the persistence layer for other APIs (e.g., CacheStorage, IndexedDB). For now, `storage_endpoint` is always "localStorage", `storage_key` is the website's origin, and `bottle_key` is the name of the localStorage key.
		
			
				
	
	
		
			51 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2024-2025, Shannon Booth <shannon@serenityos.org>
 | |
|  * Copyright (c) 2025, Aliaksandr Kalenik <kalenik.aliaksandr@gmail.com>
 | |
|  *
 | |
|  * SPDX-License-Identifier: BSD-2-Clause
 | |
|  */
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <AK/Optional.h>
 | |
| #include <AK/String.h>
 | |
| #include <AK/Types.h>
 | |
| #include <LibWeb/StorageAPI/StorageType.h>
 | |
| 
 | |
| namespace Web::StorageAPI {
 | |
| 
 | |
| enum class StorageEndpointType : u8 {
 | |
|     Caches = 0,
 | |
|     IndexedDB = 1,
 | |
|     LocalStorage = 2,
 | |
|     ServiceWorkerRegistrations = 3,
 | |
|     SessionStorage = 4,
 | |
| 
 | |
|     Count = 5 // This should always be the last value in the enum.
 | |
| };
 | |
| 
 | |
| // https://storage.spec.whatwg.org/#storage-endpoint
 | |
| //
 | |
| // A storage endpoint is a local or session storage API that uses the infrastructure defined by this
 | |
| // standard, most notably storage bottles, to keep track of its storage needs.
 | |
| struct StorageEndpoint {
 | |
|     static constexpr u64 LOCAL_STORAGE_QUOTA = 5 * MiB;
 | |
|     static constexpr u64 SESSION_STORAGE_QUOTA = 5 * MiB;
 | |
| 
 | |
|     // https://storage.spec.whatwg.org/#storage-endpoint-identifier
 | |
|     // A storage endpoint has an identifier, which is a storage identifier.
 | |
|     StorageEndpointType identifier;
 | |
| 
 | |
|     // https://storage.spec.whatwg.org/#storage-endpoint-types
 | |
|     // A storage endpoint also has types, which is a set of storage types.
 | |
|     // NOTE: We do not implement this as a set as it is not necessary in the current implementation.
 | |
|     StorageType type;
 | |
| 
 | |
|     // https://storage.spec.whatwg.org/#storage-endpoint-quota
 | |
|     // A storage endpoint also has a quota, which is null or a number representing a recommended quota (in bytes) for each storage bottle corresponding to this storage endpoint.
 | |
|     Optional<u64> quota;
 | |
| 
 | |
|     static ReadonlySpan<StorageEndpoint> registered_endpoints();
 | |
| };
 | |
| 
 | |
| }
 |