aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBarigbue Nbira <barigbuenbira@gmail.com>2025-04-18 21:01:26 +0100
committerGitHub <noreply@github.com>2025-04-18 20:01:26 +0000
commitadd8c51f4728fbafe56781670f9ae4b1a754e094 (patch)
tree92741a6d5a241b815b3df4acd2dfe3028de44b22
parent46247a76210daef793fec29b001cf4c05281f2e4 (diff)
downloadservo-add8c51f4728fbafe56781670f9ae4b1a754e094.tar.gz
servo-add8c51f4728fbafe56781670f9ae4b1a754e094.zip
Prevent multiple notifications for image dimensions (#36600)
Added a simple check to only perform metadata extraction and listener notification when we haven't already processed the metadata for an image Testing: Existing tests should cover if we break decoding image metadata complete. Fixes: #36502 --------- Signed-off-by: Barigbue <barigbuenbira@gmail.com> Co-authored-by: Josh Matthews <josh@joshmatthews.net>
-rw-r--r--components/net/image_cache.rs20
1 files changed, 11 insertions, 9 deletions
diff --git a/components/net/image_cache.rs b/components/net/image_cache.rs
index 55a2c86cae8..eab2f9c08fe 100644
--- a/components/net/image_cache.rs
+++ b/components/net/image_cache.rs
@@ -608,16 +608,18 @@ impl ImageCache for ImageCacheImpl {
pending_load.bytes.extend_from_slice(&data);
//jmr0 TODO: possibly move to another task?
- let mut reader = std::io::Cursor::new(pending_load.bytes.as_slice());
- if let Ok(info) = imsz_from_reader(&mut reader) {
- let img_metadata = ImageMetadata {
- width: info.width as u32,
- height: info.height as u32,
- };
- for listener in &pending_load.listeners {
- listener.respond(ImageResponse::MetadataLoaded(img_metadata.clone()));
+ if pending_load.metadata.is_none() {
+ let mut reader = std::io::Cursor::new(pending_load.bytes.as_slice());
+ if let Ok(info) = imsz_from_reader(&mut reader) {
+ let img_metadata = ImageMetadata {
+ width: info.width as u32,
+ height: info.height as u32,
+ };
+ for listener in &pending_load.listeners {
+ listener.respond(ImageResponse::MetadataLoaded(img_metadata.clone()));
+ }
+ pending_load.metadata = Some(img_metadata);
}
- pending_load.metadata = Some(img_metadata);
}
},
(FetchResponseMsg::ProcessResponseEOF(_, result), key) => {