aboutsummaryrefslogtreecommitdiffstats
path: root/components/net/image_cache_thread.rs
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2016-07-21 12:04:18 +0530
committerManish Goregaokar <manishsmail@gmail.com>2016-07-21 12:07:25 +0530
commitceb85795b1feed53121f9683cc34d2fd76cef761 (patch)
tree5fe1a6f4265ca1bbd4be73d96777313957a962ff /components/net/image_cache_thread.rs
parent20b1764d71a967ee4a355cd1b55e4250fe5f59a9 (diff)
downloadservo-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.rs36
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);