aboutsummaryrefslogtreecommitdiffstats
path: root/components/net/blob_loader.rs
diff options
context:
space:
mode:
authorZhen Zhang <izgzhen@gmail.com>2016-08-01 21:06:58 +0200
committerZhen Zhang <izgzhen@gmail.com>2016-08-02 23:51:51 +0200
commit17ae38a31880e32afe8458a132b838241579f073 (patch)
tree419954a6061f18b47448b3a4e5a29c1ab639d83c /components/net/blob_loader.rs
parent7807895d5839ddd8e042b7e741961a75b70c37d8 (diff)
downloadservo-17ae38a31880e32afe8458a132b838241579f073.tar.gz
servo-17ae38a31880e32afe8458a132b838241579f073.zip
Add cancellability to file manager load and related refactoring
Diffstat (limited to 'components/net/blob_loader.rs')
-rw-r--r--components/net/blob_loader.rs22
1 files changed, 10 insertions, 12 deletions
diff --git a/components/net/blob_loader.rs b/components/net/blob_loader.rs
index d8e4e6663e8..0783afd979a 100644
--- a/components/net/blob_loader.rs
+++ b/components/net/blob_loader.rs
@@ -2,10 +2,11 @@
* 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 filemanager_thread::{FileManager, UIProvider};
use hyper::header::{DispositionType, ContentDisposition, DispositionParam};
use hyper::header::{Headers, ContentType, ContentLength, Charset};
use hyper::http::RawStatus;
-use ipc_channel::ipc::{self, IpcSender};
+use ipc_channel::ipc;
use mime::{Mime, Attr};
use mime_classifier::MimeClassifier;
use net_traits::ProgressMsg::{Payload, Done};
@@ -22,29 +23,26 @@ use util::thread::spawn_named;
// TODO: Check on GET
// https://w3c.github.io/FileAPI/#requestResponseModel
-pub fn factory(filemanager_chan: IpcSender<FileManagerThreadMsg>)
- -> Box<FnBox(LoadData,
- LoadConsumer,
- Arc<MimeClassifier>,
- CancellationListener) + Send> {
+pub fn factory<UI: 'static + UIProvider>(filemanager: Arc<FileManager<UI>>)
+ -> Box<FnBox(LoadData, LoadConsumer, Arc<MimeClassifier>, CancellationListener) + Send> {
box move |load_data: LoadData, start_chan, classifier, cancel_listener| {
spawn_named(format!("blob loader for {}", load_data.url), move || {
- load_blob(load_data, start_chan, classifier, filemanager_chan, cancel_listener);
+ load_blob(load_data, start_chan, classifier, filemanager, cancel_listener);
})
}
}
-fn load_blob(load_data: LoadData, start_chan: LoadConsumer,
+fn load_blob<UI: 'static + UIProvider>
+ (load_data: LoadData, start_chan: LoadConsumer,
classifier: Arc<MimeClassifier>,
- filemanager_chan: IpcSender<FileManagerThreadMsg>,
- // XXX(izgzhen): we should utilize cancel_listener, filed in #12589
- _cancel_listener: CancellationListener) {
+ filemanager: Arc<FileManager<UI>>,
+ cancel_listener: CancellationListener) {
let (chan, recv) = ipc::channel().unwrap();
if let Ok((id, origin, _fragment)) = parse_blob_url(&load_data.url.clone()) {
let id = SelectedFileId(id.simple().to_string());
let check_url_validity = true;
let msg = FileManagerThreadMsg::ReadFile(chan, id, check_url_validity, origin);
- let _ = filemanager_chan.send(msg);
+ let _ = filemanager.handle(msg, Some(cancel_listener));
// Receive first chunk
match recv.recv().unwrap() {