Use crossbeam channel instead of servo channel. Fix rebase issues and add comment

This commit is contained in:
Fernando Jiménez Moreno 2018-11-26 09:15:18 +01:00
parent ef57ecbdb7
commit 4561a97309
3 changed files with 11 additions and 9 deletions

View file

@ -640,7 +640,7 @@ fn scheme_fetch(
// Setup channel to receive cross-thread messages about the file fetch // Setup channel to receive cross-thread messages about the file fetch
// operation. // operation.
let (done_sender, done_receiver) = channel(); let (done_sender, done_receiver) = unbounded();
*done_chan = Some((done_sender.clone(), done_receiver)); *done_chan = Some((done_sender.clone(), done_receiver));
*response.body.lock().unwrap() = ResponseBody::Receiving(vec![]); *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 { if is_range_request {
partial_content(&mut response); partial_content(&mut response);
} }
let (done_sender, done_receiver) = channel(); let (done_sender, done_receiver) = unbounded();
*done_chan = Some((done_sender.clone(), done_receiver)); *done_chan = Some((done_sender.clone(), done_receiver));
*response.body.lock().unwrap() = ResponseBody::Receiving(vec![]); *response.body.lock().unwrap() = ResponseBody::Receiving(vec![]);
let check_url_validity = true; let check_url_validity = true;

View file

@ -3,6 +3,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use crate::fetch::methods::{CancellationListener, Data, RangeRequestBounds}; use crate::fetch::methods::{CancellationListener, Data, RangeRequestBounds};
use crossbeam_channel::Sender;
use embedder_traits::{EmbedderMsg, EmbedderProxy, FilterPattern}; use embedder_traits::{EmbedderMsg, EmbedderProxy, FilterPattern};
use headers_ext::{ContentLength, ContentType, HeaderMap, HeaderMapExt}; use headers_ext::{ContentLength, ContentType, HeaderMap, HeaderMapExt};
use http::header::{self, HeaderValue}; use http::header::{self, HeaderValue};
@ -17,7 +18,6 @@ use net_traits::filemanager_thread::{
use net_traits::http_percent_encode; use net_traits::http_percent_encode;
use net_traits::response::{Response, ResponseBody}; use net_traits::response::{Response, ResponseBody};
use servo_arc::Arc as ServoArc; use servo_arc::Arc as ServoArc;
use servo_channel;
use servo_config::prefs::PREFS; use servo_config::prefs::PREFS;
use std::collections::HashMap; use std::collections::HashMap;
use std::fs::File; use std::fs::File;
@ -107,7 +107,7 @@ impl FileManager {
// in a separate thread. // in a separate thread.
pub fn fetch_file( pub fn fetch_file(
&self, &self,
done_sender: &servo_channel::Sender<Data>, done_sender: &Sender<Data>,
cancellation_listener: Arc<Mutex<CancellationListener>>, cancellation_listener: Arc<Mutex<CancellationListener>>,
id: Uuid, id: Uuid,
check_url_validity: bool, check_url_validity: bool,
@ -526,7 +526,7 @@ impl FileManagerStore {
fn fetch_blob_buf( fn fetch_blob_buf(
&self, &self,
done_sender: &servo_channel::Sender<Data>, done_sender: &Sender<Data>,
cancellation_listener: Arc<Mutex<CancellationListener>>, cancellation_listener: Arc<Mutex<CancellationListener>>,
id: &Uuid, id: &Uuid,
origin_in: &FileOrigin, origin_in: &FileOrigin,
@ -794,7 +794,7 @@ fn read_file_in_chunks(
} }
pub fn fetch_file_in_chunks( pub fn fetch_file_in_chunks(
done_sender: servo_channel::Sender<Data>, done_sender: Sender<Data>,
mut reader: BufReader<File>, mut reader: BufReader<File>,
res_body: ServoArc<Mutex<ResponseBody>>, res_body: ServoArc<Mutex<ResponseBody>>,
cancellation_listener: Arc<Mutex<CancellationListener>>, cancellation_listener: Arc<Mutex<CancellationListener>>,
@ -816,6 +816,9 @@ pub fn fetch_file_in_chunks(
let offset = usize::min( let offset = usize::min(
{ {
if let Some(end) = range.end { 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 = let remaining_bytes =
end as usize - range.start as usize - body.len() + 1; end as usize - range.start as usize - body.len() + 1;
if remaining_bytes <= FILE_CHUNK_SIZE { if remaining_bytes <= FILE_CHUNK_SIZE {

View file

@ -38,7 +38,6 @@ use net_traits::response::{CacheState, Response, ResponseBody, ResponseType};
use net_traits::{ use net_traits::{
FetchTaskTarget, IncludeSubdomains, NetworkError, ReferrerPolicy, ResourceFetchTiming, ResourceTimingType, FetchTaskTarget, IncludeSubdomains, NetworkError, ReferrerPolicy, ResourceFetchTiming, ResourceTimingType,
}; };
use servo_channel::{channel, Sender};
use servo_url::{ImmutableOrigin, ServoUrl}; use servo_url::{ImmutableOrigin, ServoUrl};
use std::fs::File; use std::fs::File;
use std::io::Read; 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 mut request = Request::new(url, Some(Origin::Origin(origin.origin())), None);
let (sender, receiver) = channel(); let (sender, receiver) = unbounded();
let mut target = FetchResponseCollector { let mut target = FetchResponseCollector {
sender, sender,