diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2016-07-21 04:08:49 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-07-21 04:08:49 -0500 |
commit | a39bd7db5ba26fa3c95e4bbbb5f1a358bc01965f (patch) | |
tree | 62a26e97151c44127322dc2ab66518f5ce7d5e77 /components/net/image_cache_thread.rs | |
parent | 4a77cbdbb2fc1a4f163171356a7f5340e1237317 (diff) | |
parent | ceb85795b1feed53121f9683cc34d2fd76cef761 (diff) | |
download | servo-a39bd7db5ba26fa3c95e4bbbb5f1a358bc01965f.tar.gz servo-a39bd7db5ba26fa3c95e4bbbb5f1a358bc01965f.zip |
Auto merge of #12535 - Manishearth:try-resource, r=KiChjang
Use Result instead of panicking when the resource dir can't be found
<!-- Please describe your changes on the following line: -->
---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [x] These changes fix #12520 (github issue number if applicable).
<!-- Either: -->
- [ ] There are tests for these changes OR
- [x] These changes do not require tests because it's a refactoring
<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/12535)
<!-- Reviewable:end -->
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); |