aboutsummaryrefslogtreecommitdiffstats
path: root/components/net_traits/image_cache.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/net_traits/image_cache.rs')
-rw-r--r--components/net_traits/image_cache.rs46
1 files changed, 33 insertions, 13 deletions
diff --git a/components/net_traits/image_cache.rs b/components/net_traits/image_cache.rs
index e640ca5b292..9c5ca0b1455 100644
--- a/components/net_traits/image_cache.rs
+++ b/components/net_traits/image_cache.rs
@@ -73,14 +73,6 @@ pub enum ImageResponse {
None,
}
-/// The current state of an image in the cache.
-#[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)]
-pub enum ImageState {
- Pending(PendingImageId),
- LoadError,
- NotRequested(PendingImageId),
-}
-
/// The unique id for an image that has previously been requested.
#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, MallocSizeOf, PartialEq, Serialize)]
pub struct PendingImageId(pub u64);
@@ -101,22 +93,50 @@ pub enum UsePlaceholder {
// ImageCache public API.
// ======================================================================
+pub enum ImageCacheResult {
+ Available(ImageOrMetadataAvailable),
+ LoadError,
+ Pending(PendingImageId),
+ ReadyForRequest(PendingImageId),
+}
+
pub trait ImageCache: Sync + Send {
fn new(webrender_api: WebrenderIpcSender) -> Self
where
Self: Sized;
- /// Return any available metadata or image for the given URL,
- /// or an indication that the image is not yet available if it is in progress,
- /// or else reserve a slot in the cache for the URL if the consumer can request images.
- fn find_image_or_metadata(
+ /// Definitively check whether there is a cached, fully loaded image available.
+ fn get_image(
+ &self,
+ url: ServoUrl,
+ origin: ImmutableOrigin,
+ cors_setting: Option<CorsSettings>,
+ ) -> Option<Arc<Image>>;
+
+ fn get_cached_image_status(
+ &self,
+ url: ServoUrl,
+ origin: ImmutableOrigin,
+ cors_setting: Option<CorsSettings>,
+ use_placeholder: UsePlaceholder,
+ can_request: CanRequestImages,
+ ) -> ImageCacheResult;
+
+ /// Add a listener for the provided pending image id, eventually called by
+ /// ImageCacheStore::complete_load.
+ /// If only metadata is available, Available(ImageOrMetadataAvailable) will
+ /// be returned.
+ /// If Available(ImageOrMetadataAvailable::Image) or LoadError is the final value,
+ /// the provided listener will be dropped (consumed & not added to PendingLoad).
+ fn track_image(
&self,
url: ServoUrl,
origin: ImmutableOrigin,
cors_setting: Option<CorsSettings>,
+ sender: IpcSender<PendingImageResponse>,
use_placeholder: UsePlaceholder,
can_request: CanRequestImages,
- ) -> Result<ImageOrMetadataAvailable, ImageState>;
+ ) -> ImageCacheResult;
/// Add a new listener for the given pending image id. If the image is already present,
/// the responder will still receive the expected response.