diff options
Diffstat (limited to 'src/components/net')
-rw-r--r-- | src/components/net/image_cache_task.rs | 98 | ||||
-rw-r--r-- | src/components/net/local_image_cache.rs | 10 | ||||
-rw-r--r-- | src/components/net/resource_task.rs | 2 |
3 files changed, 56 insertions, 54 deletions
diff --git a/src/components/net/image_cache_task.rs b/src/components/net/image_cache_task.rs index 9f7ea6904c2..f81e3fb960d 100644 --- a/src/components/net/image_cache_task.rs +++ b/src/components/net/image_cache_task.rs @@ -157,6 +157,7 @@ struct ImageCache { need_exit: Option<Chan<()>>, } +#[deriving(Clone)] enum ImageState { Init, Prefetching(AfterPrefetch), @@ -166,6 +167,7 @@ enum ImageState { Failed } +#[deriving(Clone)] enum AfterPrefetch { DoDecode, DoNotDecode @@ -242,25 +244,25 @@ impl ImageCache { } priv fn prefetch(&self, url: Url) { - match self.get_state(copy url) { + match self.get_state(url.clone()) { Init => { let to_cache = self.chan.clone(); let resource_task = self.resource_task.clone(); - let url_cell = Cell::new(copy url); + let url_cell = Cell::new(url.clone()); do spawn { let url = url_cell.take(); debug!("image_cache_task: started fetch for %s", url.to_str()); - let image = load_image_data(copy url, resource_task.clone()); + let image = load_image_data(url.clone(), resource_task.clone()); let result = if image.is_ok() { Ok(Cell::new(result::unwrap(image))) } else { Err(()) }; - to_cache.send(StorePrefetchedImageData(copy url, result)); - debug!("image_cache_task: ended fetch for %s", (copy url).to_str()); + to_cache.send(StorePrefetchedImageData(url.clone(), result)); + debug!("image_cache_task: ended fetch for %s", (url.clone()).to_str()); } self.set_state(url, Prefetching(DoNotDecode)); @@ -273,19 +275,19 @@ impl ImageCache { } priv fn store_prefetched_image_data(&self, url: Url, data: Result<Cell<~[u8]>, ()>) { - match self.get_state(copy url) { + match self.get_state(url.clone()) { Prefetching(next_step) => { match data { Ok(data_cell) => { let data = data_cell.take(); - self.set_state(copy url, Prefetched(@Cell::new(data))); + self.set_state(url.clone(), Prefetched(@Cell::new(data))); match next_step { DoDecode => self.decode(url), _ => () } } Err(*) => { - self.set_state(copy url, Failed); + self.set_state(url.clone(), Failed); self.purge_waiters(url, || ImageFailed); } } @@ -302,7 +304,7 @@ impl ImageCache { } priv fn decode(&self, url: Url) { - match self.get_state(copy url) { + match self.get_state(url.clone()) { Init => fail!(~"decoding image before prefetch"), Prefetching(DoNotDecode) => { @@ -319,7 +321,7 @@ impl ImageCache { let data = data_cell.take(); let to_cache = self.chan.clone(); - let url_cell = Cell::new(copy url); + let url_cell = Cell::new(url.clone()); let decode = (self.decoder_factory)(); do spawn { @@ -331,7 +333,7 @@ impl ImageCache { } else { None }; - to_cache.send(StoreImage(copy url, image)); + to_cache.send(StoreImage(url.clone(), image)); debug!("image_cache_task: ended image decode for %s", url.to_str()); } @@ -346,15 +348,15 @@ impl ImageCache { priv fn store_image(&self, url: Url, image: Option<ARC<~Image>>) { - match self.get_state(copy url) { + match self.get_state(url.clone()) { Decoding => { match image { Some(image) => { - self.set_state(copy url, Decoded(@image.clone())); + self.set_state(url.clone(), Decoded(@image.clone())); self.purge_waiters(url, || ImageReady(image.clone()) ); } None => { - self.set_state(copy url, Failed); + self.set_state(url.clone(), Failed); self.purge_waiters(url, || ImageFailed ); } } @@ -383,7 +385,7 @@ impl ImageCache { } priv fn get_image(&self, url: Url, response: Chan<ImageResponseMsg>) { - match self.get_state(copy url) { + match self.get_state(url.clone()) { Init => fail!(~"request for image before prefetch"), Prefetching(DoDecode) => response.send(ImageNotReady), Prefetching(DoNotDecode) | Prefetched(*) => fail!(~"request for image before decode"), @@ -394,7 +396,7 @@ impl ImageCache { } priv fn wait_for_image(&self, url: Url, response: Chan<ImageResponseMsg>) { - match self.get_state(copy url) { + match self.get_state(url.clone()) { Init => fail!(~"request for image before prefetch"), Prefetching(DoNotDecode) | Prefetched(*) => fail!(~"request for image before decode"), @@ -540,7 +542,7 @@ fn should_fail_if_requesting_image_before_requesting_decode() { let image_cache_task = ImageCacheTask(mock_resource_task); let url = make_url(~"file", None); - image_cache_task.send(Prefetch(copy url)); + image_cache_task.send(Prefetch(url.clone())); // no decode message let (chan, _port) = stream(); @@ -563,7 +565,7 @@ fn should_not_request_url_from_resource_task_on_multiple_prefetches() { let image_cache_task = ImageCacheTask(mock_resource_task); let url = make_url(~"file", None); - image_cache_task.send(Prefetch(copy url)); + image_cache_task.send(Prefetch(url.clone())); image_cache_task.send(Prefetch(url)); url_requested.recv(); image_cache_task.exit(); @@ -586,8 +588,8 @@ fn should_return_image_not_ready_if_data_has_not_arrived() { let image_cache_task = ImageCacheTask(mock_resource_task); let url = make_url(~"file", None); - image_cache_task.send(Prefetch(copy url)); - image_cache_task.send(Decode(copy url)); + image_cache_task.send(Prefetch(url.clone())); + image_cache_task.send(Decode(url.clone())); let (response_chan, response_port) = stream(); image_cache_task.send(GetImage(url, response_chan)); assert!(response_port.recv() == ImageNotReady); @@ -616,8 +618,8 @@ fn should_return_decoded_image_data_if_data_has_arrived() { } })); - image_cache_task.send(Prefetch(copy url)); - image_cache_task.send(Decode(copy url)); + image_cache_task.send(Prefetch(url.clone())); + image_cache_task.send(Decode(url.clone())); // Wait until our mock resource task has sent the image to the image cache wait_for_image_chan.recv(); @@ -653,15 +655,15 @@ fn should_return_decoded_image_data_for_multiple_requests() { } })); - image_cache_task.send(Prefetch(copy url)); - image_cache_task.send(Decode(copy url)); + image_cache_task.send(Prefetch(url.clone())); + image_cache_task.send(Decode(url.clone())); // Wait until our mock resource task has sent the image to the image cache wait_for_image.recv(); for iter::repeat(2) { let (response_chan, response_port) = stream(); - image_cache_task.send(GetImage(copy url, response_chan)); + image_cache_task.send(GetImage(url.clone(), response_chan)); match response_port.recv() { ImageReady(_) => (), _ => fail @@ -699,12 +701,12 @@ fn should_not_request_image_from_resource_task_if_image_is_already_available() { let image_cache_task = ImageCacheTask(mock_resource_task); let url = make_url(~"file", None); - image_cache_task.send(Prefetch(copy url)); + image_cache_task.send(Prefetch(url.clone())); // Wait until our mock resource task has sent the image to the image cache image_bin_sent.recv(); - image_cache_task.send(Prefetch(copy url)); + image_cache_task.send(Prefetch(url.clone())); image_cache_task.exit(); mock_resource_task.send(resource_task::Exit); @@ -743,14 +745,14 @@ fn should_not_request_image_from_resource_task_if_image_fetch_already_failed() { let image_cache_task = ImageCacheTask(mock_resource_task); let url = make_url(~"file", None); - image_cache_task.send(Prefetch(copy url)); - image_cache_task.send(Decode(copy url)); + image_cache_task.send(Prefetch(url.clone())); + image_cache_task.send(Decode(url.clone())); // Wait until our mock resource task has sent the image to the image cache image_bin_sent.recv(); - image_cache_task.send(Prefetch(copy url)); - image_cache_task.send(Decode(copy url)); + image_cache_task.send(Prefetch(url.clone())); + image_cache_task.send(Decode(url.clone())); image_cache_task.exit(); mock_resource_task.send(resource_task::Exit); @@ -783,8 +785,8 @@ fn should_return_failed_if_image_bin_cannot_be_fetched() { } })); - image_cache_task.send(Prefetch(copy url)); - image_cache_task.send(Decode(copy url)); + image_cache_task.send(Prefetch(url.clone())); + image_cache_task.send(Decode(url.clone())); // Wait until our mock resource task has sent the image to the image cache wait_for_prefetech.recv(); @@ -821,14 +823,14 @@ fn should_return_failed_for_multiple_get_image_requests_if_image_bin_cannot_be_f } })); - image_cache_task.send(Prefetch(copy url)); - image_cache_task.send(Decode(copy url)); + image_cache_task.send(Prefetch(url.clone())); + image_cache_task.send(Decode(url.clone())); // Wait until our mock resource task has sent the image to the image cache wait_for_prefetech.recv(); let (response_chan, response_port) = stream(); - image_cache_task.send(GetImage(copy url, response_chan)); + image_cache_task.send(GetImage(url.clone(), response_chan)); match response_port.recv() { ImageFailed => (), _ => fail @@ -878,8 +880,8 @@ fn should_return_not_ready_if_image_is_still_decoding() { } })); - image_cache_task.send(Prefetch(copy url)); - image_cache_task.send(Decode(copy url)); + image_cache_task.send(Prefetch(url.clone())); + image_cache_task.send(Decode(url.clone())); // Wait until our mock resource task has sent the image to the image cache wait_for_prefetech.recv(); @@ -921,8 +923,8 @@ fn should_return_failed_if_image_decode_fails() { } })); - image_cache_task.send(Prefetch(copy url)); - image_cache_task.send(Decode(copy url)); + image_cache_task.send(Prefetch(url.clone())); + image_cache_task.send(Decode(url.clone())); // Wait until our mock resource task has sent the image to the image cache wait_for_decode.recv(); @@ -960,8 +962,8 @@ fn should_return_image_on_wait_if_image_is_already_loaded() { } })); - image_cache_task.send(Prefetch(copy url)); - image_cache_task.send(Decode(copy url)); + image_cache_task.send(Prefetch(url.clone())); + image_cache_task.send(Decode(url.clone())); // Wait until our mock resource task has sent the image to the image cache wait_for_decode.recv(); @@ -990,8 +992,8 @@ fn should_return_image_on_wait_if_image_is_not_yet_loaded() { let image_cache_task = ImageCacheTask(mock_resource_task); let url = make_url(~"file", None); - image_cache_task.send(Prefetch(copy url)); - image_cache_task.send(Decode(copy url)); + image_cache_task.send(Prefetch(url.clone())); + image_cache_task.send(Decode(url.clone())); let (response_chan, response_port) = stream(); image_cache_task.send(WaitForImage(url, response_chan)); @@ -1020,8 +1022,8 @@ fn should_return_image_failed_on_wait_if_image_fails_to_load() { let image_cache_task = ImageCacheTask(mock_resource_task); let url = make_url(~"file", None); - image_cache_task.send(Prefetch(copy url)); - image_cache_task.send(Decode(copy url)); + image_cache_task.send(Prefetch(url.clone())); + image_cache_task.send(Decode(url.clone())); let (response_chan, response_port) = stream(); image_cache_task.send(WaitForImage(url, response_chan)); @@ -1047,8 +1049,8 @@ fn sync_cache_should_wait_for_images() { let image_cache_task = SyncImageCacheTask(mock_resource_task); let url = make_url(~"file", None); - image_cache_task.send(Prefetch(copy url)); - image_cache_task.send(Decode(copy url)); + image_cache_task.send(Prefetch(url.clone())); + image_cache_task.send(Decode(url.clone())); let (response_chan, response_port) = stream(); image_cache_task.send(GetImage(url, response_chan)); diff --git a/src/components/net/local_image_cache.rs b/src/components/net/local_image_cache.rs index 31adf9326cc..5555c35aa5f 100644 --- a/src/components/net/local_image_cache.rs +++ b/src/components/net/local_image_cache.rs @@ -51,7 +51,7 @@ impl LocalImageCache { pub fn prefetch(&self, url: &Url) { let state = self.get_state(url); if !state.prefetched { - self.image_cache_task.send(Prefetch(copy *url)); + self.image_cache_task.send(Prefetch((*url).clone())); state.prefetched = true; } } @@ -59,7 +59,7 @@ impl LocalImageCache { pub fn decode(&self, url: &Url) { let state = self.get_state(url); if !state.decoded { - self.image_cache_task.send(Decode(copy *url)); + self.image_cache_task.send(Decode((*url).clone())); state.decoded = true; } } @@ -97,7 +97,7 @@ impl LocalImageCache { } let (response_port, response_chan) = comm::stream(); - self.image_cache_task.send(GetImage(copy *url, response_chan)); + self.image_cache_task.send(GetImage((*url).clone(), response_chan)); let response = response_port.recv(); match response { @@ -110,10 +110,10 @@ impl LocalImageCache { let image_cache_task = self.image_cache_task.clone(); assert!(self.on_image_available.is_some()); let on_image_available = self.on_image_available.get()(); - let url = copy *url; + let url = (*url).clone(); do task::spawn { let (response_port, response_chan) = comm::stream(); - image_cache_task.send(WaitForImage(copy url, response_chan)); + image_cache_task.send(WaitForImage(url.clone(), response_chan)); on_image_available(response_port.recv()); } } diff --git a/src/components/net/resource_task.rs b/src/components/net/resource_task.rs index 457cd6dfd35..0b74e614627 100644 --- a/src/components/net/resource_task.rs +++ b/src/components/net/resource_task.rs @@ -142,7 +142,7 @@ fn test_bad_scheme() { fn should_delegate_to_scheme_loader() { let payload = ~[1, 2, 3]; let loader_factory = |_url: Url, progress_chan: Chan<ProgressMsg>| { - progress_chan.send(Payload(copy payload)); + progress_chan.send(Payload(payload.clone())); progress_chan.send(Done(Ok(()))); }; let loader_factories = ~[(~"snicklefritz", loader_factory)]; |