diff options
author | Zhen Zhang <izgzhen@gmail.com> | 2016-07-24 11:37:34 +0200 |
---|---|---|
committer | Zhen Zhang <izgzhen@gmail.com> | 2016-07-25 19:39:16 +0200 |
commit | 9c8ebd3ce1f48f2aff811d6f3eedd7a3f3b8f553 (patch) | |
tree | 624d686a08f6dd9c208366062670581c490c8383 /components/script/dom | |
parent | 2de3b119a961942943280fa280c50a7a814de583 (diff) | |
download | servo-9c8ebd3ce1f48f2aff811d6f3eedd7a3f3b8f553.tar.gz servo-9c8ebd3ce1f48f2aff811d6f3eedd7a3f3b8f553.zip |
Chunked ReadFile from file manager
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/blob.rs | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/components/script/dom/blob.rs b/components/script/dom/blob.rs index 1e3c74e1e26..ae2b1725319 100644 --- a/components/script/dom/blob.rs +++ b/components/script/dom/blob.rs @@ -16,7 +16,7 @@ use encoding::types::{EncoderTrap, Encoding}; use ipc_channel::ipc; use net_traits::IpcSend; use net_traits::blob_url_store::{BlobBuf, get_blob_origin}; -use net_traits::filemanager_thread::{FileManagerThreadMsg, SelectedFileId, RelativePos}; +use net_traits::filemanager_thread::{FileManagerThreadMsg, SelectedFileId, RelativePos, ReadFileProgress}; use std::cell::Cell; use std::ops::Index; use std::path::PathBuf; @@ -286,9 +286,21 @@ fn read_file(global: GlobalRef, id: SelectedFileId) -> Result<Vec<u8>, ()> { let msg = FileManagerThreadMsg::ReadFile(chan, id, check_url_validity, origin); let _ = file_manager.send(msg); - match recv.recv().unwrap() { - Ok(blob_buf) => Ok(blob_buf.bytes), - Err(_) => Err(()), + let mut bytes = vec![]; + + loop { + match recv.recv().unwrap() { + Ok(ReadFileProgress::Meta(mut blob_buf)) => { + bytes.append(&mut blob_buf.bytes); + } + Ok(ReadFileProgress::Partial(mut bytes_in)) => { + bytes.append(&mut bytes_in); + } + Ok(ReadFileProgress::EOF) => { + return Ok(bytes); + } + Err(_) => return Err(()), + } } } |