aboutsummaryrefslogtreecommitdiffstats
path: root/components/net/image_cache_thread.rs
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2016-07-21 04:08:49 -0500
committerGitHub <noreply@github.com>2016-07-21 04:08:49 -0500
commita39bd7db5ba26fa3c95e4bbbb5f1a358bc01965f (patch)
tree62a26e97151c44127322dc2ab66518f5ce7d5e77 /components/net/image_cache_thread.rs
parent4a77cbdbb2fc1a4f163171356a7f5340e1237317 (diff)
parentceb85795b1feed53121f9683cc34d2fd76cef761 (diff)
downloadservo-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.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);