diff options
-rw-r--r-- | components/net/fetch/methods.rs | 6 | ||||
-rw-r--r-- | components/net/filemanager_thread.rs | 11 | ||||
-rw-r--r-- | components/net/tests/fetch.rs | 3 |
3 files changed, 11 insertions, 9 deletions
diff --git a/components/net/fetch/methods.rs b/components/net/fetch/methods.rs index 19736de1136..bd9dfce2dab 100644 --- a/components/net/fetch/methods.rs +++ b/components/net/fetch/methods.rs @@ -640,7 +640,7 @@ fn scheme_fetch( // Setup channel to receive cross-thread messages about the file fetch // operation. - let (done_sender, done_receiver) = channel(); + let (done_sender, done_receiver) = unbounded(); *done_chan = Some((done_sender.clone(), done_receiver)); *response.body.lock().unwrap() = ResponseBody::Receiving(vec![]); @@ -687,12 +687,12 @@ fn scheme_fetch( }, }; - let mut response = Response::new(url); + let mut response = Response::new(url, ResourceFetchTiming::new(request.timing_type())); if is_range_request { partial_content(&mut response); } - let (done_sender, done_receiver) = channel(); + let (done_sender, done_receiver) = unbounded(); *done_chan = Some((done_sender.clone(), done_receiver)); *response.body.lock().unwrap() = ResponseBody::Receiving(vec![]); let check_url_validity = true; diff --git a/components/net/filemanager_thread.rs b/components/net/filemanager_thread.rs index dce6da0ed0f..f0779df632b 100644 --- a/components/net/filemanager_thread.rs +++ b/components/net/filemanager_thread.rs @@ -3,6 +3,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use crate::fetch::methods::{CancellationListener, Data, RangeRequestBounds}; +use crossbeam_channel::Sender; use embedder_traits::{EmbedderMsg, EmbedderProxy, FilterPattern}; use headers_ext::{ContentLength, ContentType, HeaderMap, HeaderMapExt}; use http::header::{self, HeaderValue}; @@ -17,7 +18,6 @@ use net_traits::filemanager_thread::{ use net_traits::http_percent_encode; use net_traits::response::{Response, ResponseBody}; use servo_arc::Arc as ServoArc; -use servo_channel; use servo_config::prefs::PREFS; use std::collections::HashMap; use std::fs::File; @@ -107,7 +107,7 @@ impl FileManager { // in a separate thread. pub fn fetch_file( &self, - done_sender: &servo_channel::Sender<Data>, + done_sender: &Sender<Data>, cancellation_listener: Arc<Mutex<CancellationListener>>, id: Uuid, check_url_validity: bool, @@ -526,7 +526,7 @@ impl FileManagerStore { fn fetch_blob_buf( &self, - done_sender: &servo_channel::Sender<Data>, + done_sender: &Sender<Data>, cancellation_listener: Arc<Mutex<CancellationListener>>, id: &Uuid, origin_in: &FileOrigin, @@ -794,7 +794,7 @@ fn read_file_in_chunks( } pub fn fetch_file_in_chunks( - done_sender: servo_channel::Sender<Data>, + done_sender: Sender<Data>, mut reader: BufReader<File>, res_body: ServoArc<Mutex<ResponseBody>>, cancellation_listener: Arc<Mutex<CancellationListener>>, @@ -816,6 +816,9 @@ pub fn fetch_file_in_chunks( let offset = usize::min( { if let Some(end) = range.end { + // HTTP Range requests are specified with closed ranges, + // while Rust uses half-open ranges. We add +1 here so + // we don't skip the last requested byte. let remaining_bytes = end as usize - range.start as usize - body.len() + 1; if remaining_bytes <= FILE_CHUNK_SIZE { diff --git a/components/net/tests/fetch.rs b/components/net/tests/fetch.rs index 9fc8c351f83..e0311a5e626 100644 --- a/components/net/tests/fetch.rs +++ b/components/net/tests/fetch.rs @@ -38,7 +38,6 @@ use net_traits::response::{CacheState, Response, ResponseBody, ResponseType}; use net_traits::{ FetchTaskTarget, IncludeSubdomains, NetworkError, ReferrerPolicy, ResourceFetchTiming, ResourceTimingType, }; -use servo_channel::{channel, Sender}; use servo_url::{ImmutableOrigin, ServoUrl}; use std::fs::File; use std::io::Read; @@ -169,7 +168,7 @@ fn test_fetch_blob() { let mut request = Request::new(url, Some(Origin::Origin(origin.origin())), None); - let (sender, receiver) = channel(); + let (sender, receiver) = unbounded(); let mut target = FetchResponseCollector { sender, |