From d155daf5bf8f8860acf6841c33c039f5cc1baf86 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Fri, 10 Aug 2012 16:31:51 -0700 Subject: [PATCH] Add some more error handling to ImageCache --- src/servo/resource/image_cache_task.rs | 47 +++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/src/servo/resource/image_cache_task.rs b/src/servo/resource/image_cache_task.rs index 048d78d3f0a..bab5b56308a 100644 --- a/src/servo/resource/image_cache_task.rs +++ b/src/servo/resource/image_cache_task.rs @@ -107,7 +107,9 @@ impl ImageCache { break; } resource_task::Done(result::err(*)) => { - fail ~"FIXME: what happens now?" + // FIXME: need to actually report the failed image load + self.prefetch_map.remove(url); + break; } } } @@ -392,3 +394,46 @@ fn should_not_request_image_from_resource_task_if_image_is_already_available() { // because it's already cached assert !image_bin_sent.peek(); } + +#[test] +fn should_return_not_ready_if_image_bin_cannot_be_fetched() { + + let image_bin_sent = port(); + let image_bin_sent_chan = image_bin_sent.chan(); + + let mock_resource_task = do spawn_listener |from_client| { + + // infer me + let from_client: port = from_client; + + loop { + match from_client.recv() { + resource_task::Load(_, response) => { + response.send(resource_task::Payload(test_image_bin())); + // ERROR fetching image + response.send(resource_task::Done(result::err(()))); + image_bin_sent_chan.send(()); + } + resource_task::Exit => break + } + } + }; + + let image_cache_task = image_cache_task(mock_resource_task); + let url = make_url(~"file", none); + + image_cache_task.send(Prefetch(url)); + + // Wait until our mock resource task has sent the image to the image cache + image_bin_sent.recv(); + + let response_port = port(); + image_cache_task.send(GetImage(url, response_port.chan())); + match response_port.recv() { + ImageNotReady => (), + _ => fail + } + + image_cache_task.send(Exit); + mock_resource_task.send(resource_task::Exit); +}