Skip to content

Commit

Permalink
Implementing the builder pattern for RequestInit
Browse files Browse the repository at this point in the history
  • Loading branch information
d3vsanchez committed Apr 4, 2019
1 parent 6fa1853 commit f3b6ef9
Show file tree
Hide file tree
Showing 27 changed files with 638 additions and 566 deletions.
6 changes: 3 additions & 3 deletions components/constellation/constellation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ use msg::constellation_msg::{
};
use msg::constellation_msg::{PipelineNamespace, PipelineNamespaceId, TraversalDirection};
use net_traits::pub_domains::reg_host;
use net_traits::request::RequestInit;
use net_traits::request::RequestBuilder;
use net_traits::storage_thread::{StorageThreadMsg, StorageType};
use net_traits::{self, FetchResponseMsg, IpcSend, ResourceThreads};
use profile_traits::mem;
Expand Down Expand Up @@ -1934,11 +1934,11 @@ where
fn handle_navigate_request(
&self,
id: PipelineId,
req_init: RequestInit,
request_builder: RequestBuilder,
cancel_chan: IpcReceiver<()>,
) {
let listener = NetworkListener::new(
req_init,
request_builder,
id,
self.public_resource_threads.clone(),
self.network_listener_sender.clone(),
Expand Down
32 changes: 18 additions & 14 deletions components/constellation/network_listener.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,14 @@ use ipc_channel::ipc;
use ipc_channel::router::ROUTER;
use msg::constellation_msg::PipelineId;
use net::http_loader::{set_default_accept, set_default_accept_language};
use net_traits::request::{Destination, RequestInit};
use net_traits::request::{Destination, RequestBuilder};
use net_traits::response::ResponseInit;
use net_traits::{CoreResourceMsg, FetchChannels, FetchMetadata, FetchResponseMsg};
use net_traits::{IpcSend, NetworkError, ResourceThreads};

pub struct NetworkListener {
res_init: Option<ResponseInit>,
req_init: RequestInit,
request_builder: RequestBuilder,
pipeline_id: PipelineId,
resource_threads: ResourceThreads,
sender: Sender<(PipelineId, FetchResponseMsg)>,
Expand All @@ -28,14 +28,14 @@ pub struct NetworkListener {

impl NetworkListener {
pub fn new(
req_init: RequestInit,
request_builder: RequestBuilder,
pipeline_id: PipelineId,
resource_threads: ResourceThreads,
sender: Sender<(PipelineId, FetchResponseMsg)>,
) -> NetworkListener {
NetworkListener {
res_init: None,
req_init,
request_builder,
pipeline_id,
resource_threads,
sender,
Expand All @@ -48,7 +48,7 @@ impl NetworkListener {

let mut listener = NetworkListener {
res_init: self.res_init.clone(),
req_init: self.req_init.clone(),
request_builder: self.request_builder.clone(),
resource_threads: self.resource_threads.clone(),
sender: self.sender.clone(),
pipeline_id: self.pipeline_id.clone(),
Expand All @@ -57,17 +57,17 @@ impl NetworkListener {

let msg = match self.res_init {
Some(ref res_init_) => CoreResourceMsg::FetchRedirect(
self.req_init.clone(),
self.request_builder.clone(),
res_init_.clone(),
ipc_sender,
None,
),
None => {
set_default_accept(Destination::Document, &mut listener.req_init.headers);
set_default_accept_language(&mut listener.req_init.headers);
set_default_accept(Destination::Document, &mut listener.request_builder.headers);
set_default_accept_language(&mut listener.request_builder.headers);

CoreResourceMsg::Fetch(
listener.req_init.clone(),
listener.request_builder.clone(),
FetchChannels::ResponseMsg(ipc_sender, cancel_chan),
)
},
Expand Down Expand Up @@ -100,13 +100,17 @@ impl NetworkListener {

match metadata.headers {
Some(ref headers) if headers.contains_key(LOCATION) => {
if self.req_init.url_list.is_empty() {
self.req_init.url_list.push(self.req_init.url.clone());
if self.request_builder.url_list.is_empty() {
self.request_builder
.url_list
.push(self.request_builder.url.clone());
}
self.req_init.url_list.push(metadata.final_url.clone());
self.request_builder
.url_list
.push(metadata.final_url.clone());

self.req_init.referrer_url = metadata.referrer.clone();
self.req_init.referrer_policy = metadata.referrer_policy;
self.request_builder.referrer_url = metadata.referrer.clone();
self.request_builder.referrer_policy = metadata.referrer_policy;

self.res_init = Some(ResponseInit {
url: metadata.final_url.clone(),
Expand Down
10 changes: 2 additions & 8 deletions components/gfx/font_cache_thread.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ use crate::platform::font_list::SANS_SERIF_FONT_FAMILY;
use crate::platform::font_template::FontTemplateData;
use app_units::Au;
use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
use net_traits::request::{Destination, RequestInit};
use net_traits::request::{Destination, RequestBuilder};
use net_traits::{fetch_async, CoreResourceThread, FetchResponseMsg};
use servo_atoms::Atom;
use servo_url::ServoUrl;
Expand Down Expand Up @@ -238,13 +238,7 @@ impl FontCache {
None => return,
};

let request = RequestInit {
url: url.clone(),
destination: Destination::Font,
// TODO: Add a proper origin - Can't import GlobalScope from gfx
// We can leave origin to be set by default
..RequestInit::default()
};
let request = RequestBuilder::new(url.clone()).destination(Destination::Font);

let channel_to_self = self.channel_to_self.clone();
let bytes = Mutex::new(Vec::new());
Expand Down
12 changes: 6 additions & 6 deletions components/net/resource_thread.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ use embedder_traits::EmbedderProxy;
use hyper_serde::Serde;
use ipc_channel::ipc::{self, IpcReceiver, IpcReceiverSet, IpcSender};
use malloc_size_of::{MallocSizeOf, MallocSizeOfOps};
use net_traits::request::{Destination, Request, RequestInit};
use net_traits::request::{Destination, RequestBuilder};
use net_traits::response::{Response, ResponseInit};
use net_traits::storage_thread::StorageThreadMsg;
use net_traits::WebSocketNetworkEvent;
Expand Down Expand Up @@ -430,7 +430,7 @@ impl CoreResourceManager {

fn fetch(
&self,
req_init: RequestInit,
request_builder: RequestBuilder,
res_init_: Option<ResponseInit>,
mut sender: IpcSender<FetchResponseMsg>,
http_state: &Arc<HttpState>,
Expand All @@ -441,15 +441,15 @@ impl CoreResourceManager {
let dc = self.devtools_chan.clone();
let filemanager = self.filemanager.clone();

let timing_type = match req_init.destination {
let timing_type = match request_builder.destination {
Destination::Document => ResourceTimingType::Navigation,
_ => ResourceTimingType::Resource,
};

thread::Builder::new()
.name(format!("fetch thread for {}", req_init.url))
.name(format!("fetch thread for {}", request_builder.url))
.spawn(move || {
let mut request = Request::from_init(req_init);
let mut request = request_builder.build();
// XXXManishearth: Check origin against pipeline id (also ensure that the mode is allowed)
// todo load context / mimesniff in fetch
// todo referrer policy?
Expand Down Expand Up @@ -486,7 +486,7 @@ impl CoreResourceManager {

fn websocket_connect(
&self,
request: RequestInit,
request: RequestBuilder,
event_sender: IpcSender<WebSocketNetworkEvent>,
action_receiver: IpcReceiver<WebSocketDomAction>,
http_state: &Arc<HttpState>,
Expand Down
Loading

0 comments on commit f3b6ef9

Please sign in to comment.