mirror of
https://github.com/servo/servo.git
synced 2025-06-21 23:59:00 +01:00
Don't continually re-request completed requests that had load errors.
This commit is contained in:
parent
2742fd2bea
commit
d4e85f9a90
2 changed files with 21 additions and 20 deletions
|
@ -10,7 +10,7 @@ use net_traits::image_cache::{
|
||||||
CanRequestImages, CorsStatus, ImageCache, ImageCacheResult, ImageResponder,
|
CanRequestImages, CorsStatus, ImageCache, ImageCacheResult, ImageResponder,
|
||||||
PendingImageResponse,
|
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::image_cache::{PendingImageId, UsePlaceholder};
|
||||||
use net_traits::request::CorsSettings;
|
use net_traits::request::CorsSettings;
|
||||||
use net_traits::{
|
use net_traits::{
|
||||||
|
@ -391,7 +391,7 @@ impl ImageCacheStore {
|
||||||
origin: ImmutableOrigin,
|
origin: ImmutableOrigin,
|
||||||
cors_setting: Option<CorsSettings>,
|
cors_setting: Option<CorsSettings>,
|
||||||
placeholder: UsePlaceholder,
|
placeholder: UsePlaceholder,
|
||||||
) -> Option<Result<ImageOrMetadataAvailable, ImageState>> {
|
) -> Option<Result<(Arc<Image>, ServoUrl), ()>> {
|
||||||
self.completed_loads
|
self.completed_loads
|
||||||
.get(&(url, origin, cors_setting))
|
.get(&(url, origin, cors_setting))
|
||||||
.map(
|
.map(
|
||||||
|
@ -400,13 +400,10 @@ impl ImageCacheStore {
|
||||||
(
|
(
|
||||||
&ImageResponse::PlaceholderLoaded(ref image, ref url),
|
&ImageResponse::PlaceholderLoaded(ref image, ref url),
|
||||||
UsePlaceholder::Yes,
|
UsePlaceholder::Yes,
|
||||||
) => Ok(ImageOrMetadataAvailable::ImageAvailable(
|
) => Ok((image.clone(), url.clone())),
|
||||||
image.clone(),
|
|
||||||
url.clone(),
|
|
||||||
)),
|
|
||||||
(&ImageResponse::PlaceholderLoaded(_, _), UsePlaceholder::No) |
|
(&ImageResponse::PlaceholderLoaded(_, _), UsePlaceholder::No) |
|
||||||
(&ImageResponse::None, _) |
|
(&ImageResponse::None, _) |
|
||||||
(&ImageResponse::MetadataLoaded(_), _) => Err(ImageState::LoadError),
|
(&ImageResponse::MetadataLoaded(_), _) => Err(()),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -453,7 +450,7 @@ impl ImageCache for ImageCacheImpl {
|
||||||
let result =
|
let result =
|
||||||
store.get_completed_image_if_available(url, origin, cors_setting, UsePlaceholder::No);
|
store.get_completed_image_if_available(url, origin, cors_setting, UsePlaceholder::No);
|
||||||
match result {
|
match result {
|
||||||
Some(Ok(ImageOrMetadataAvailable::ImageAvailable(img, _))) => Some(img),
|
Some(Ok((img, _))) => Some(img),
|
||||||
_ => None,
|
_ => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -467,14 +464,24 @@ impl ImageCache for ImageCacheImpl {
|
||||||
can_request: CanRequestImages,
|
can_request: CanRequestImages,
|
||||||
) -> ImageCacheResult {
|
) -> ImageCacheResult {
|
||||||
let mut store = self.store.lock().unwrap();
|
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(),
|
url.clone(),
|
||||||
origin.clone(),
|
origin.clone(),
|
||||||
cors_setting,
|
cors_setting,
|
||||||
use_placeholder,
|
use_placeholder,
|
||||||
) {
|
) {
|
||||||
debug!("{} is available", url);
|
match result {
|
||||||
return ImageCacheResult::Available(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 = {
|
let decoded = {
|
||||||
|
@ -518,7 +525,9 @@ impl ImageCache for ImageCacheImpl {
|
||||||
// TODO: make this behaviour configurable according to the caller's needs.
|
// TODO: make this behaviour configurable according to the caller's needs.
|
||||||
store.handle_decoder(decoded);
|
store.handle_decoder(decoded);
|
||||||
match store.get_completed_image_if_available(url, origin, cors_setting, use_placeholder) {
|
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,
|
_ => ImageCacheResult::LoadError,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,14 +73,6 @@ pub enum ImageResponse {
|
||||||
None,
|
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.
|
/// The unique id for an image that has previously been requested.
|
||||||
#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, MallocSizeOf, PartialEq, Serialize)]
|
#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, MallocSizeOf, PartialEq, Serialize)]
|
||||||
pub struct PendingImageId(pub u64);
|
pub struct PendingImageId(pub u64);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue