diff options
author | Manish Goregaokar <manishsmail@gmail.com> | 2016-07-21 12:04:18 +0530 |
---|---|---|
committer | Manish Goregaokar <manishsmail@gmail.com> | 2016-07-21 12:07:25 +0530 |
commit | ceb85795b1feed53121f9683cc34d2fd76cef761 (patch) | |
tree | 5fe1a6f4265ca1bbd4be73d96777313957a962ff /components/net/image_cache_thread.rs | |
parent | 20b1764d71a967ee4a355cd1b55e4250fe5f59a9 (diff) | |
download | servo-ceb85795b1feed53121f9683cc34d2fd76cef761.tar.gz servo-ceb85795b1feed53121f9683cc34d2fd76cef761.zip |
Use Result instead of panicking when the resource dir can't be found
Diffstat (limited to 'components/net/image_cache_thread.rs')
-rw-r--r-- | components/net/image_cache_thread.rs | 36 |
1 files changed, 17 insertions, 19 deletions
diff --git a/components/net/image_cache_thread.rs b/components/net/image_cache_thread.rs index 49a5a6e69f7..b18cc22dc01 100644 --- a/components/net/image_cache_thread.rs +++ b/components/net/image_cache_thread.rs @@ -16,7 +16,7 @@ use std::borrow::ToOwned; use std::collections::HashMap; use std::collections::hash_map::Entry::{Occupied, Vacant}; use std::fs::File; -use std::io::Read; +use std::io::{self, Read}; use std::mem; use std::sync::Arc; use std::sync::mpsc::{Sender, Receiver, channel}; @@ -318,29 +318,27 @@ impl LoadOrigin for ImageCacheOrigin { } } - +fn get_placeholder_image(webrender_api: &Option<webrender_traits::RenderApi>) -> io::Result<Arc<Image>> { + let mut placeholder_path = try!(resources_dir_path()); + placeholder_path.push("rippy.png"); + let mut file = try!(File::open(&placeholder_path)); + let mut image_data = vec![]; + try!(file.read_to_end(&mut image_data)); + let mut image = load_from_memory(&image_data).unwrap(); + if let Some(ref webrender_api) = *webrender_api { + let format = convert_format(image.format); + let mut bytes = Vec::new(); + bytes.extend_from_slice(&*image.bytes); + image.id = Some(webrender_api.add_image(image.width, image.height, format, bytes)); + } + Ok(Arc::new(image)) +} impl ImageCache { fn run(core_resource_thread: CoreResourceThread, webrender_api: Option<webrender_traits::RenderApi>, ipc_command_receiver: IpcReceiver<ImageCacheCommand>) { // Preload the placeholder image, used when images fail to load. - let mut placeholder_path = resources_dir_path(); - placeholder_path.push("rippy.png"); - - let mut image_data = vec![]; - let result = File::open(&placeholder_path).and_then(|mut file| { - file.read_to_end(&mut image_data) - }); - let placeholder_image = result.ok().map(|_| { - let mut image = load_from_memory(&image_data).unwrap(); - if let Some(ref webrender_api) = webrender_api { - let format = convert_format(image.format); - let mut bytes = Vec::new(); - bytes.extend_from_slice(&*image.bytes); - image.id = Some(webrender_api.add_image(image.width, image.height, format, bytes)); - } - Arc::new(image) - }); + let placeholder_image = get_placeholder_image(&webrender_api).ok(); // Ask the router to proxy messages received over IPC to us. let cmd_receiver = ROUTER.route_ipc_receiver_to_new_mpsc_receiver(ipc_command_receiver); |