aboutsummaryrefslogtreecommitdiffstats
path: root/components/net/image_cache_task.rs
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2015-07-10 20:02:17 -0700
committerPatrick Walton <pcwalton@mimiga.net>2015-07-26 23:07:44 -0700
commit82b53d83ff6a85d337fdf0d322d0c5a0d334555b (patch)
tree7256bf28d766192e336410ef6b76fe8275df1d7a /components/net/image_cache_task.rs
parent380de1ba821140b180ef137796e5c3097a953c11 (diff)
downloadservo-82b53d83ff6a85d337fdf0d322d0c5a0d334555b.tar.gz
servo-82b53d83ff6a85d337fdf0d322d0c5a0d334555b.zip
script: Make the `ImageCacheTask` use IPC.
This necessitated getting rid of the boxed trait object that was being be passed between the script task and the image cache task.
Diffstat (limited to 'components/net/image_cache_task.rs')
-rw-r--r--components/net/image_cache_task.rs19
1 files changed, 12 insertions, 7 deletions
diff --git a/components/net/image_cache_task.rs b/components/net/image_cache_task.rs
index e99d9047c0f..e6088051c29 100644
--- a/components/net/image_cache_task.rs
+++ b/components/net/image_cache_task.rs
@@ -2,6 +2,8 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+use ipc_channel::ipc::{self, IpcSender};
+use ipc_channel::router::ROUTER;
use net_traits::image::base::{Image, load_from_memory};
use net_traits::image_cache_task::{ImageState, ImageCacheTask, ImageCacheChan, ImageCacheCommand};
use net_traits::image_cache_task::{ImageCacheResult, ImageResponse, UsePlaceholder};
@@ -69,11 +71,11 @@ impl CompletedLoad {
/// of an image changes.
struct ImageListener {
sender: ImageCacheChan,
- responder: Option<Box<ImageResponder>>,
+ responder: Option<ImageResponder>,
}
impl ImageListener {
- fn new(sender: ImageCacheChan, responder: Option<Box<ImageResponder>>) -> ImageListener {
+ fn new(sender: ImageCacheChan, responder: Option<ImageResponder>) -> ImageListener {
ImageListener {
sender: sender,
responder: responder,
@@ -153,7 +155,7 @@ enum SelectResult {
impl ImageCache {
fn run(&mut self) {
- let mut exit_sender: Option<Sender<()>> = None;
+ let mut exit_sender: Option<IpcSender<()>> = None;
loop {
let result = {
@@ -203,7 +205,7 @@ impl ImageCache {
}
// Handle a request from a client
- fn handle_cmd(&mut self, cmd: ImageCacheCommand) -> Option<Sender<()>> {
+ fn handle_cmd(&mut self, cmd: ImageCacheCommand) -> Option<IpcSender<()>> {
match cmd {
ImageCacheCommand::Exit(sender) => {
return Some(sender);
@@ -303,7 +305,7 @@ impl ImageCache {
fn request_image(&mut self,
url: Url,
result_chan: ImageCacheChan,
- responder: Option<Box<ImageResponder>>) {
+ responder: Option<ImageResponder>) {
let image_listener = ImageListener::new(result_chan, responder);
// Check if already completed
@@ -343,7 +345,7 @@ impl ImageCache {
/// Create a new image cache.
pub fn new_image_cache_task(resource_task: ResourceTask) -> ImageCacheTask {
- let (cmd_sender, cmd_receiver) = channel();
+ let (ipc_command_sender, ipc_command_receiver) = ipc::channel().unwrap();
let (progress_sender, progress_receiver) = channel();
let (decoder_sender, decoder_receiver) = channel();
@@ -370,6 +372,9 @@ pub fn new_image_cache_task(resource_task: ResourceTask) -> ImageCacheTask {
}
};
+ // 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);
+
let mut cache = ImageCache {
cmd_receiver: cmd_receiver,
progress_sender: progress_sender,
@@ -386,6 +391,6 @@ pub fn new_image_cache_task(resource_task: ResourceTask) -> ImageCacheTask {
cache.run();
});
- ImageCacheTask::new(cmd_sender)
+ ImageCacheTask::new(ipc_command_sender)
}