Skip to main content

storage_traits/
cache_storage.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::ops::{Deref, DerefMut};
6
7use malloc_size_of_derive::MallocSizeOf;
8use serde::{Deserialize, Serialize};
9use servo_base::generic_channel::{GenericCallback, GenericSender};
10use servo_url::ImmutableOrigin;
11
12use crate::client_storage::StorageProxyMap;
13
14#[derive(Debug, Deserialize, Serialize)]
15pub enum CacheStorageError<T> {
16    Internal(T),
17}
18
19#[derive(Clone, Debug, Deserialize, MallocSizeOf, Serialize)]
20pub struct CacheStorageThreadHandle {
21    sender: GenericSender<CacheStorageThreadMessage>,
22}
23
24impl CacheStorageThreadHandle {
25    pub fn new(sender: GenericSender<CacheStorageThreadMessage>) -> Self {
26        CacheStorageThreadHandle { sender }
27    }
28}
29
30impl From<CacheStorageThreadHandle> for GenericSender<CacheStorageThreadMessage> {
31    fn from(handle: CacheStorageThreadHandle) -> Self {
32        handle.sender
33    }
34}
35
36impl From<GenericSender<CacheStorageThreadMessage>> for CacheStorageThreadHandle {
37    fn from(sender: GenericSender<CacheStorageThreadMessage>) -> Self {
38        CacheStorageThreadHandle::new(sender)
39    }
40}
41
42impl Deref for CacheStorageThreadHandle {
43    type Target = GenericSender<CacheStorageThreadMessage>;
44
45    fn deref(&self) -> &Self::Target {
46        &self.sender
47    }
48}
49
50impl DerefMut for CacheStorageThreadHandle {
51    fn deref_mut(&mut self) -> &mut Self::Target {
52        &mut self.sender
53    }
54}
55
56#[derive(Clone, Debug, Deserialize, Serialize)]
57pub enum CacheStorageThreadMessage {
58    /// <https://w3c.github.io/ServiceWorker/#cache-storage-has>
59    HasCache {
60        cache_name: String,
61        callback: GenericCallback<CacheStorageThreadResponse>,
62        proxy: StorageProxyMap,
63        origin: ImmutableOrigin,
64    },
65    /// <https://w3c.github.io/ServiceWorker/#cache-storage-open>
66    OpenCache {
67        cache_name: String,
68        callback: GenericCallback<CacheStorageThreadResponse>,
69        proxy: StorageProxyMap,
70        origin: ImmutableOrigin,
71    },
72    /// <https://w3c.github.io/ServiceWorker/#cache-keys>
73    Keys {
74        cache_name: String,
75        callback: GenericCallback<CacheStorageThreadResponse>,
76        origin: ImmutableOrigin,
77    },
78    DeleteCache {
79        cache_name: String,
80        callback: GenericCallback<CacheStorageThreadResponse>,
81        proxy: StorageProxyMap,
82        origin: ImmutableOrigin,
83    },
84    Exit(GenericSender<()>),
85}
86
87#[derive(Clone, Debug, Deserialize, Serialize)]
88pub enum CacheStorageThreadResponse {
89    HasCacheResult(Result<bool, String>),
90    OpenCacheResult {
91        result: Result<(), String>,
92        cache_name: String,
93    },
94    KeysResult(Result<Vec<String>, String>),
95    DeleteCacheResult(Result<bool, String>),
96}