diff options
author | Barigbue Nbira <barigbuenbira@gmail.com> | 2025-04-18 21:01:26 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-04-18 20:01:26 +0000 |
commit | add8c51f4728fbafe56781670f9ae4b1a754e094 (patch) | |
tree | 92741a6d5a241b815b3df4acd2dfe3028de44b22 | |
parent | 46247a76210daef793fec29b001cf4c05281f2e4 (diff) | |
download | servo-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.rs | 20 |
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) => { |