storage/
storage_thread.rs1use std::path::PathBuf;
6
7use profile_traits::mem::ProfilerChan as MemProfilerChan;
8use servo_base::generic_channel::GenericSender;
9use storage_traits::StorageThreads;
10use storage_traits::client_storage::ClientStorageThreadHandle;
11use storage_traits::indexeddb::IndexedDBThreadMsg;
12use storage_traits::webstorage_thread::WebStorageThreadMsg;
13
14use crate::{ClientStorageThreadFactory, IndexedDBThreadFactory, WebStorageThreadFactory};
15
16fn new_storage_thread_group(
17 mem_profiler_chan: MemProfilerChan,
18 config_dir: Option<PathBuf>,
19 temporary_storage: bool,
20 label: &str,
21) -> StorageThreads {
22 let client_storage: ClientStorageThreadHandle =
23 ClientStorageThreadFactory::new(config_dir.clone(), temporary_storage);
24 let idb: GenericSender<IndexedDBThreadMsg> = IndexedDBThreadFactory::new(
25 mem_profiler_chan.clone(),
26 format!("indexedDB-reporter-{label}"),
27 );
28 let web_storage: GenericSender<WebStorageThreadMsg> = WebStorageThreadFactory::new(
29 config_dir,
30 mem_profiler_chan,
31 format!("storage-reporter-{label}"),
32 );
33
34 StorageThreads::new(client_storage.into(), idb, web_storage)
35}
36
37pub fn new_storage_threads(
38 mem_profiler_chan: MemProfilerChan,
39 config_dir: Option<PathBuf>,
40 temporary_storage: bool,
41) -> (StorageThreads, StorageThreads) {
42 let private_storage_threads = new_storage_thread_group(
43 mem_profiler_chan.clone(),
44 config_dir.clone(),
45 temporary_storage,
46 "private",
47 );
48 let public_storage_threads =
49 new_storage_thread_group(mem_profiler_chan, config_dir, temporary_storage, "public");
50
51 (private_storage_threads, public_storage_threads)
52}