diff options
author | Patrick Walton <pcwalton@mimiga.net> | 2015-07-10 20:02:17 -0700 |
---|---|---|
committer | Patrick Walton <pcwalton@mimiga.net> | 2015-07-26 23:07:44 -0700 |
commit | 82b53d83ff6a85d337fdf0d322d0c5a0d334555b (patch) | |
tree | 7256bf28d766192e336410ef6b76fe8275df1d7a /components/net/image_cache_task.rs | |
parent | 380de1ba821140b180ef137796e5c3097a953c11 (diff) | |
download | servo-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.rs | 19 |
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) } |