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    Exit(GenericSender<()>),
66}
67
68#[derive(Clone, Debug, Deserialize, Serialize)]
69pub enum CacheStorageThreadResponse {
70    HasCacheResult(Result<bool, String>),
71}