mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Redirect document loads manually
This commit is contained in:
parent
779edd7c4a
commit
541baafe1c
17 changed files with 376 additions and 52 deletions
|
@ -8,10 +8,11 @@ use cookie;
|
|||
use cookie_rs;
|
||||
use cookie_storage::CookieStorage;
|
||||
use devtools_traits::DevtoolsControlMsg;
|
||||
use fetch::cors_cache::CorsCache;
|
||||
use fetch::methods::{FetchContext, fetch};
|
||||
use filemanager_thread::{FileManager, TFDProvider};
|
||||
use hsts::HstsList;
|
||||
use http_loader::HttpState;
|
||||
use http_loader::{HttpState, http_redirect_fetch};
|
||||
use hyper_serde::Serde;
|
||||
use ipc_channel::ipc::{self, IpcReceiver, IpcReceiverSet, IpcSender};
|
||||
use net_traits::{CookieSource, CoreResourceThread};
|
||||
|
@ -19,6 +20,7 @@ use net_traits::{CoreResourceMsg, FetchResponseMsg};
|
|||
use net_traits::{CustomResponseMediator, ResourceId};
|
||||
use net_traits::{ResourceThreads, WebSocketCommunicate, WebSocketConnectData};
|
||||
use net_traits::request::{Request, RequestInit};
|
||||
use net_traits::response::{Response, ResponseInit};
|
||||
use net_traits::storage_thread::StorageThreadMsg;
|
||||
use profile_traits::time::ProfilerChan;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
@ -153,8 +155,10 @@ impl ResourceChannelManager {
|
|||
msg: CoreResourceMsg,
|
||||
http_state: &Arc<HttpState>) -> bool {
|
||||
match msg {
|
||||
CoreResourceMsg::Fetch(init, sender) =>
|
||||
self.resource_manager.fetch(init, sender, http_state),
|
||||
CoreResourceMsg::Fetch(req_init, sender) =>
|
||||
self.resource_manager.fetch(req_init, None, sender, http_state),
|
||||
CoreResourceMsg::FetchRedirect(req_init, res_init, sender) =>
|
||||
self.resource_manager.fetch(req_init, Some(res_init), sender, http_state),
|
||||
CoreResourceMsg::WebsocketConnect(connect, connect_data) =>
|
||||
self.resource_manager.websocket_connect(connect, connect_data, http_state),
|
||||
CoreResourceMsg::SetCookieForUrl(request, cookie, source) =>
|
||||
|
@ -318,7 +322,8 @@ impl CoreResourceManager {
|
|||
}
|
||||
|
||||
fn fetch(&self,
|
||||
init: RequestInit,
|
||||
req_init: RequestInit,
|
||||
res_init_: Option<ResponseInit>,
|
||||
mut sender: IpcSender<FetchResponseMsg>,
|
||||
http_state: &Arc<HttpState>) {
|
||||
let http_state = http_state.clone();
|
||||
|
@ -326,8 +331,8 @@ impl CoreResourceManager {
|
|||
let dc = self.devtools_chan.clone();
|
||||
let filemanager = self.filemanager.clone();
|
||||
|
||||
thread::Builder::new().name(format!("fetch thread for {}", init.url)).spawn(move || {
|
||||
let mut request = Request::from_init(init);
|
||||
thread::Builder::new().name(format!("fetch thread for {}", req_init.url)).spawn(move || {
|
||||
let mut request = Request::from_init(req_init);
|
||||
// XXXManishearth: Check origin against pipeline id (also ensure that the mode is allowed)
|
||||
// todo load context / mimesniff in fetch
|
||||
// todo referrer policy?
|
||||
|
@ -338,7 +343,20 @@ impl CoreResourceManager {
|
|||
devtools_chan: dc,
|
||||
filemanager: filemanager,
|
||||
};
|
||||
fetch(&mut request, &mut sender, &context);
|
||||
|
||||
match res_init_ {
|
||||
Some(res_init) => {
|
||||
let response = Response::from_init(res_init);
|
||||
http_redirect_fetch(&mut request,
|
||||
&mut CorsCache::new(),
|
||||
response,
|
||||
true,
|
||||
&mut sender,
|
||||
&mut None,
|
||||
&context);
|
||||
},
|
||||
None => fetch(&mut request, &mut sender, &context),
|
||||
};
|
||||
}).expect("Thread spawning failed");
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue