mirror of
https://github.com/servo/servo.git
synced 2025-08-04 13:10:20 +01:00
Introduce http_loader::set_default_accept
This commit is contained in:
parent
4281205662
commit
901877da1a
2 changed files with 57 additions and 43 deletions
|
@ -8,12 +8,12 @@ use data_loader::decode;
|
|||
use devtools_traits::DevtoolsControlMsg;
|
||||
use fetch::cors_cache::CorsCache;
|
||||
use filemanager_thread::FileManager;
|
||||
use http_loader::{HttpState, determine_request_referrer, http_fetch, set_default_accept_language};
|
||||
use http_loader::{HttpState, determine_request_referrer, http_fetch};
|
||||
use http_loader::{set_default_accept, set_default_accept_language};
|
||||
use hyper::{Error, Result as HyperResult};
|
||||
use hyper::client::Pool;
|
||||
use hyper::header::{Accept, AcceptLanguage, ContentLanguage, ContentType};
|
||||
use hyper::header::{Header, HeaderFormat, HeaderView, Headers, QualityItem};
|
||||
use hyper::header::{Referer as RefererHeader, q, qitem};
|
||||
use hyper::header::{Header, HeaderFormat, HeaderView, Headers, Referer as RefererHeader};
|
||||
use hyper::method::Method;
|
||||
use hyper::mime::{Mime, SubLevel, TopLevel};
|
||||
use hyper::status::StatusCode;
|
||||
|
@ -75,37 +75,7 @@ pub fn fetch_with_cors_cache(request: &mut Request,
|
|||
}
|
||||
|
||||
// Step 3.
|
||||
if !request.headers.has::<Accept>() {
|
||||
let value = match request.type_ {
|
||||
// Step 3.2.
|
||||
_ if request.is_navigation_request() =>
|
||||
vec![qitem(mime!(Text / Html)),
|
||||
// FIXME: This should properly generate a MimeType that has a
|
||||
// SubLevel of xhtml+xml (https://github.com/hyperium/mime.rs/issues/22)
|
||||
qitem(mime!(Application / ("xhtml+xml") )),
|
||||
QualityItem::new(mime!(Application / Xml), q(0.9)),
|
||||
QualityItem::new(mime!(_ / _), q(0.8))],
|
||||
|
||||
// Step 3.3.
|
||||
Type::Image =>
|
||||
vec![qitem(mime!(Image / Png)),
|
||||
// FIXME: This should properly generate a MimeType that has a
|
||||
// SubLevel of svg+xml (https://github.com/hyperium/mime.rs/issues/22)
|
||||
qitem(mime!(Image / ("svg+xml") )),
|
||||
QualityItem::new(mime!(Image / _), q(0.8)),
|
||||
QualityItem::new(mime!(_ / _), q(0.5))],
|
||||
|
||||
// Step 3.3.
|
||||
Type::Style =>
|
||||
vec![qitem(mime!(Text / Css)),
|
||||
QualityItem::new(mime!(_ / _), q(0.1))],
|
||||
// Step 3.1.
|
||||
_ => vec![qitem(mime!(_ / _))]
|
||||
};
|
||||
|
||||
// Step 3.4.
|
||||
request.headers.set(Accept(value));
|
||||
}
|
||||
set_default_accept(request.type_, request.destination, &mut request.headers);
|
||||
|
||||
// Step 4.
|
||||
set_default_accept_language(&mut request.headers);
|
||||
|
|
|
@ -16,14 +16,16 @@ use hyper::Error as HttpError;
|
|||
use hyper::LanguageTag;
|
||||
use hyper::client::{Pool, Request as HyperRequest, Response as HyperResponse};
|
||||
use hyper::client::pool::PooledStream;
|
||||
use hyper::header::{AcceptEncoding, AcceptLanguage, AccessControlAllowCredentials};
|
||||
use hyper::header::{AccessControlAllowOrigin, AccessControlAllowHeaders, AccessControlAllowMethods};
|
||||
use hyper::header::{AccessControlRequestHeaders, AccessControlMaxAge, AccessControlRequestMethod};
|
||||
use hyper::header::{Authorization, Basic, CacheControl, CacheDirective, ContentEncoding};
|
||||
use hyper::header::{ContentLength, Encoding, Header, Headers, Host, IfMatch, IfRange};
|
||||
use hyper::header::{IfUnmodifiedSince, IfModifiedSince, IfNoneMatch, Location, Pragma, Quality};
|
||||
use hyper::header::{QualityItem, Referer, SetCookie, UserAgent, qitem};
|
||||
use hyper::header::Origin as HyperOrigin;
|
||||
use hyper::header::{Accept, AccessControlAllowCredentials, AccessControlAllowHeaders};
|
||||
use hyper::header::{AccessControlAllowMethods, AccessControlAllowOrigin};
|
||||
use hyper::header::{AccessControlMaxAge, AccessControlRequestHeaders};
|
||||
use hyper::header::{AccessControlRequestMethod, AcceptEncoding, AcceptLanguage};
|
||||
use hyper::header::{Authorization, Basic, CacheControl, CacheDirective};
|
||||
use hyper::header::{ContentEncoding, ContentLength, Encoding, Header, Headers};
|
||||
use hyper::header::{Host, Origin as HyperOrigin, IfMatch, IfRange};
|
||||
use hyper::header::{IfUnmodifiedSince, IfModifiedSince, IfNoneMatch, Location};
|
||||
use hyper::header::{Pragma, Quality, QualityItem, Referer, SetCookie};
|
||||
use hyper::header::{UserAgent, q, qitem};
|
||||
use hyper::method::Method;
|
||||
use hyper::net::{Fresh, HttpStream, HttpsStream, NetworkConnector};
|
||||
use hyper::status::StatusCode;
|
||||
|
@ -34,7 +36,8 @@ use msg::constellation_msg::PipelineId;
|
|||
use net_traits::{CookieSource, FetchMetadata, NetworkError, ReferrerPolicy};
|
||||
use net_traits::hosts::replace_host;
|
||||
use net_traits::request::{CacheMode, CredentialsMode, Destination, Origin};
|
||||
use net_traits::request::{RedirectMode, Referrer, Request, RequestMode, ResponseTainting};
|
||||
use net_traits::request::{RedirectMode, Referrer, Request, RequestMode};
|
||||
use net_traits::request::{ResponseTainting, Type};
|
||||
use net_traits::response::{HttpsState, Response, ResponseBody, ResponseType};
|
||||
use resource_thread::AuthCache;
|
||||
use servo_url::{ImmutableOrigin, ServoUrl};
|
||||
|
@ -141,6 +144,47 @@ impl NetworkHttpRequestFactory {
|
|||
}
|
||||
}
|
||||
|
||||
// Step 3 of https://fetch.spec.whatwg.org/#concept-fetch.
|
||||
pub fn set_default_accept(type_: Type, destination: Destination, headers: &mut Headers) {
|
||||
if headers.has::<Accept>() {
|
||||
return;
|
||||
}
|
||||
let value = match (type_, destination) {
|
||||
// Step 3.2.
|
||||
(_, Destination::Document) => {
|
||||
vec![
|
||||
qitem(mime!(Text / Html)),
|
||||
qitem(mime!(Application / ("xhtml+xml"))),
|
||||
QualityItem::new(mime!(Application / Xml), q(0.9)),
|
||||
QualityItem::new(mime!(_ / _), q(0.8)),
|
||||
]
|
||||
},
|
||||
// Step 3.3.
|
||||
(Type::Image, _) => {
|
||||
vec![
|
||||
qitem(mime!(Image / Png)),
|
||||
qitem(mime!(Image / ("svg+xml") )),
|
||||
QualityItem::new(mime!(Image / _), q(0.8)),
|
||||
QualityItem::new(mime!(_ / _), q(0.5)),
|
||||
]
|
||||
},
|
||||
// Step 3.3.
|
||||
(Type::Style, _) => {
|
||||
vec![
|
||||
qitem(mime!(Text / Css)),
|
||||
QualityItem::new(mime!(_ / _), q(0.1))
|
||||
]
|
||||
},
|
||||
// Step 3.1.
|
||||
_ => {
|
||||
vec![qitem(mime!(_ / _))]
|
||||
},
|
||||
};
|
||||
|
||||
// Step 3.4.
|
||||
headers.set(Accept(value));
|
||||
}
|
||||
|
||||
fn set_default_accept_encoding(headers: &mut Headers) {
|
||||
if headers.has::<AcceptEncoding>() {
|
||||
return
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue