aboutsummaryrefslogtreecommitdiffstats
path: root/components
diff options
context:
space:
mode:
Diffstat (limited to 'components')
-rw-r--r--components/net/fetch/methods.rs38
-rw-r--r--components/net/http_loader.rs62
2 files changed, 57 insertions, 43 deletions
diff --git a/components/net/fetch/methods.rs b/components/net/fetch/methods.rs
index 1f003b539cc..41aadda700c 100644
--- a/components/net/fetch/methods.rs
+++ b/components/net/fetch/methods.rs
@@ -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);
diff --git a/components/net/http_loader.rs b/components/net/http_loader.rs
index f55b94b533c..d4ed98d54ce 100644
--- a/components/net/http_loader.rs
+++ b/components/net/http_loader.rs
@@ -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