Skip to main content

storage/
storage_thread.rs

1/* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
5use 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}