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.
		
			
				
	
	
		
			37 lines
		
	
	
	
		
			994 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
	
		
			994 B
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2024-2025, Shannon Booth <shannon@serenityos.org>
 | |
|  *
 | |
|  * SPDX-License-Identifier: BSD-2-Clause
 | |
|  */
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <AK/HashMap.h>
 | |
| #include <LibGC/Ptr.h>
 | |
| #include <LibWeb/Forward.h>
 | |
| #include <LibWeb/StorageAPI/StorageKey.h>
 | |
| #include <LibWeb/StorageAPI/StorageShelf.h>
 | |
| #include <LibWeb/StorageAPI/StorageType.h>
 | |
| 
 | |
| namespace Web::StorageAPI {
 | |
| 
 | |
| // https://storage.spec.whatwg.org/#storage-shed
 | |
| // A storage shed is a map of storage keys to storage shelves. It is initially empty.
 | |
| class StorageShed : public GC::Cell {
 | |
|     GC_CELL(StorageShed, GC::Cell);
 | |
|     GC_DECLARE_ALLOCATOR(StorageShed);
 | |
| 
 | |
| public:
 | |
|     static GC::Ref<StorageShed> create(GC::Heap& heap) { return heap.allocate<StorageShed>(); }
 | |
| 
 | |
|     GC::Ptr<StorageShelf> obtain_a_storage_shelf(HTML::EnvironmentSettingsObject&, StorageType);
 | |
| 
 | |
|     virtual void visit_edges(GC::Cell::Visitor& visitor) override;
 | |
| 
 | |
| private:
 | |
|     StorageShed() = default;
 | |
| 
 | |
|     OrderedHashMap<StorageKey, GC::Ref<StorageShelf>> m_data;
 | |
| };
 | |
| 
 | |
| }
 |