diff options
author | Josh Matthews <josh@joshmatthews.net> | 2020-02-21 14:51:45 -0500 |
---|---|---|
committer | Josh Matthews <josh@joshmatthews.net> | 2020-04-17 11:59:00 -0400 |
commit | d4e85f9a904d4469b65bf73f7e465464eddb5cec (patch) | |
tree | 624afffcc581becb5cc8d23200ce762ade781d6d /components/net/image_cache.rs | |
parent | 2742fd2beaad4dafd1caca0e78c5b8cce77fa2e4 (diff) | |
download | servo-d4e85f9a904d4469b65bf73f7e465464eddb5cec.tar.gz servo-d4e85f9a904d4469b65bf73f7e465464eddb5cec.zip |
Don't continually re-request completed requests that had load errors.
Diffstat (limited to 'components/net/image_cache.rs')
-rw-r--r-- | components/net/image_cache.rs | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/components/net/image_cache.rs b/components/net/image_cache.rs index d9d45edda26..fea75ee7b95 100644 --- a/components/net/image_cache.rs +++ b/components/net/image_cache.rs @@ -10,7 +10,7 @@ use net_traits::image_cache::{ CanRequestImages, CorsStatus, ImageCache, ImageCacheResult, ImageResponder, PendingImageResponse, }; -use net_traits::image_cache::{ImageOrMetadataAvailable, ImageResponse, ImageState}; +use net_traits::image_cache::{ImageOrMetadataAvailable, ImageResponse}; use net_traits::image_cache::{PendingImageId, UsePlaceholder}; use net_traits::request::CorsSettings; use net_traits::{ @@ -391,7 +391,7 @@ impl ImageCacheStore { origin: ImmutableOrigin, cors_setting: Option<CorsSettings>, placeholder: UsePlaceholder, - ) -> Option<Result<ImageOrMetadataAvailable, ImageState>> { + ) -> Option<Result<(Arc<Image>, ServoUrl), ()>> { self.completed_loads .get(&(url, origin, cors_setting)) .map( @@ -400,13 +400,10 @@ impl ImageCacheStore { ( &ImageResponse::PlaceholderLoaded(ref image, ref url), UsePlaceholder::Yes, - ) => Ok(ImageOrMetadataAvailable::ImageAvailable( - image.clone(), - url.clone(), - )), + ) => Ok((image.clone(), url.clone())), (&ImageResponse::PlaceholderLoaded(_, _), UsePlaceholder::No) | (&ImageResponse::None, _) | - (&ImageResponse::MetadataLoaded(_), _) => Err(ImageState::LoadError), + (&ImageResponse::MetadataLoaded(_), _) => Err(()), }, ) } @@ -453,7 +450,7 @@ impl ImageCache for ImageCacheImpl { let result = store.get_completed_image_if_available(url, origin, cors_setting, UsePlaceholder::No); match result { - Some(Ok(ImageOrMetadataAvailable::ImageAvailable(img, _))) => Some(img), + Some(Ok((img, _))) => Some(img), _ => None, } } @@ -467,14 +464,24 @@ impl ImageCache for ImageCacheImpl { can_request: CanRequestImages, ) -> ImageCacheResult { let mut store = self.store.lock().unwrap(); - if let Some(Ok(result)) = store.get_completed_image_if_available( + if let Some(result) = store.get_completed_image_if_available( url.clone(), origin.clone(), cors_setting, use_placeholder, ) { - debug!("{} is available", url); - return ImageCacheResult::Available(result); + match result { + Ok((image, image_url)) => { + debug!("{} is available", url); + return ImageCacheResult::Available(ImageOrMetadataAvailable::ImageAvailable( + image, image_url, + )); + }, + Err(()) => { + debug!("{} is not available", url); + return ImageCacheResult::LoadError; + }, + } } let decoded = { @@ -518,7 +525,9 @@ impl ImageCache for ImageCacheImpl { // TODO: make this behaviour configurable according to the caller's needs. store.handle_decoder(decoded); match store.get_completed_image_if_available(url, origin, cors_setting, use_placeholder) { - Some(Ok(result)) => ImageCacheResult::Available(result), + Some(Ok((image, image_url))) => ImageCacheResult::Available( + ImageOrMetadataAvailable::ImageAvailable(image, image_url), + ), _ => ImageCacheResult::LoadError, } } |