aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeith Yeung <kungfukeith11@gmail.com>2017-10-21 06:39:23 -0700
committerKeith Yeung <kungfukeith11@gmail.com>2017-10-23 11:19:35 -0700
commitc6bb1cb9d553c13a20dace3e32b9643c433caa1e (patch)
tree0d0e46e00362136c6c7d62dc76accce9d37e27cc
parent48c715c1c86301d0f25e70d3e690d04d8303c58f (diff)
downloadservo-c6bb1cb9d553c13a20dace3e32b9643c433caa1e.tar.gz
servo-c6bb1cb9d553c13a20dace3e32b9643c433caa1e.zip
Merge request type and destination
-rw-r--r--components/constellation/network_listener.rs4
-rw-r--r--components/gfx/font_cache_thread.rs3
-rw-r--r--components/net/fetch/methods.rs44
-rw-r--r--components/net/http_loader.rs13
-rw-r--r--components/net/websocket_loader.rs6
-rw-r--r--components/net_traits/request.rs41
-rw-r--r--components/script/dom/dedicatedworkerglobalscope.rs3
-rw-r--r--components/script/dom/htmlimageelement.rs3
-rw-r--r--components/script/dom/htmlmediaelement.rs11
-rw-r--r--components/script/dom/htmlscriptelement.rs3
-rw-r--r--components/script/dom/request.rs53
-rw-r--r--components/script/dom/serviceworkerglobalscope.rs3
-rw-r--r--components/script/dom/webidls/Request.webidl19
-rw-r--r--components/script/dom/workerglobalscope.rs3
-rw-r--r--components/script/dom/worklet.rs2
-rw-r--r--components/script/fetch.rs1
-rw-r--r--components/script/layout_image.rs4
-rw-r--r--components/script/stylesheet_loader.rs3
-rw-r--r--tests/unit/net/fetch.rs16
-rw-r--r--tests/wpt/metadata/fetch/api/request/request-type-attribute-historical.html.ini5
20 files changed, 88 insertions, 152 deletions
diff --git a/components/constellation/network_listener.rs b/components/constellation/network_listener.rs
index a7f5c93a9f0..f811047ea02 100644
--- a/components/constellation/network_listener.rs
+++ b/components/constellation/network_listener.rs
@@ -13,7 +13,7 @@ use msg::constellation_msg::PipelineId;
use net::http_loader::{set_default_accept, set_default_accept_language};
use net_traits::{CoreResourceMsg, FetchMetadata, FetchResponseMsg};
use net_traits::{IpcSend, NetworkError, ResourceThreads};
-use net_traits::request::{Destination, RequestInit, Type};
+use net_traits::request::{Destination, RequestInit};
use net_traits::response::ResponseInit;
use std::sync::mpsc::Sender;
@@ -59,7 +59,7 @@ impl NetworkListener {
res_init_.clone(),
ipc_sender),
None => {
- set_default_accept(Type::None, Destination::Document, &mut listener.req_init.headers);
+ set_default_accept(Destination::Document, &mut listener.req_init.headers);
set_default_accept_language(&mut listener.req_init.headers);
CoreResourceMsg::Fetch(
diff --git a/components/gfx/font_cache_thread.rs b/components/gfx/font_cache_thread.rs
index 39fd210091e..c402610369f 100644
--- a/components/gfx/font_cache_thread.rs
+++ b/components/gfx/font_cache_thread.rs
@@ -7,7 +7,7 @@ use font_template::{FontTemplate, FontTemplateDescriptor};
use fontsan;
use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
use net_traits::{CoreResourceThread, FetchResponseMsg, fetch_async};
-use net_traits::request::{Destination, RequestInit, Type as RequestType};
+use net_traits::request::{Destination, RequestInit};
use platform::font_context::FontContextHandle;
use platform::font_list::SANS_SERIF_FONT_FAMILY;
use platform::font_list::for_each_available_family;
@@ -237,7 +237,6 @@ impl FontCache {
let request = RequestInit {
url: url.clone(),
- type_: RequestType::Font,
destination: Destination::Font,
// TODO: Add a proper origin - Can't import GlobalScope from gfx
// We can leave origin to be set by default
diff --git a/components/net/fetch/methods.rs b/components/net/fetch/methods.rs
index d871c48cc5e..b60e0556595 100644
--- a/components/net/fetch/methods.rs
+++ b/components/net/fetch/methods.rs
@@ -17,8 +17,8 @@ use hyper::mime::{Mime, SubLevel, TopLevel};
use hyper::status::StatusCode;
use mime_guess::guess_mime_type;
use net_traits::{FetchTaskTarget, NetworkError, ReferrerPolicy};
-use net_traits::request::{CredentialsMode, Referrer, Request, RequestMode, ResponseTainting};
-use net_traits::request::{Type, Origin, Window};
+use net_traits::request::{CredentialsMode, Destination, Referrer, Request, RequestMode};
+use net_traits::request::{ResponseTainting, Origin, Window};
use net_traits::response::{Response, ResponseBody, ResponseType};
use servo_url::ServoUrl;
use std::ascii::AsciiExt;
@@ -73,7 +73,7 @@ pub fn fetch_with_cors_cache(request: &mut Request,
}
// Step 3.
- set_default_accept(request.type_, request.destination, &mut request.headers);
+ set_default_accept(request.destination, &mut request.headers);
// Step 4.
set_default_accept_language(&mut request.headers);
@@ -266,9 +266,9 @@ pub fn main_fetch(request: &mut Request,
// Tests for steps 17 and 18, before step 15 for borrowing concerns.
let response_is_network_error = response.is_network_error();
let should_replace_with_nosniff_error =
- !response_is_network_error && should_be_blocked_due_to_nosniff(request.type_, &response.headers);
+ !response_is_network_error && should_be_blocked_due_to_nosniff(request.destination, &response.headers);
let should_replace_with_mime_type_error =
- !response_is_network_error && should_be_blocked_due_to_mime_type(request.type_, &response.headers);
+ !response_is_network_error && should_be_blocked_due_to_mime_type(request.destination, &response.headers);
// Step 15.
let mut network_error_response = response.get_network_error().cloned().map(Response::network_error);
@@ -529,7 +529,7 @@ fn is_null_body_status(status: &Option<StatusCode>) -> bool {
}
/// <https://fetch.spec.whatwg.org/#should-response-to-request-be-blocked-due-to-nosniff?>
-pub fn should_be_blocked_due_to_nosniff(request_type: Type, response_headers: &Headers) -> bool {
+pub fn should_be_blocked_due_to_nosniff(destination: Destination, response_headers: &Headers) -> bool {
/// <https://fetch.spec.whatwg.org/#x-content-type-options-header>
/// This is needed to parse `X-Content-Type-Options` according to spec,
/// which requires that we inspect only the first value.
@@ -599,37 +599,37 @@ pub fn should_be_blocked_due_to_nosniff(request_type: Type, response_headers: &H
}
// Assumes str::starts_with is equivalent to mime::TopLevel
- return match request_type {
+ match content_type_header {
// Step 6
- Type::Script => {
- match content_type_header {
- Some(&ContentType(ref mime_type)) => !is_javascript_mime_type(&mime_type),
- None => true
- }
- }
+ Some(&ContentType(ref mime_type)) if destination.is_script_like()
+ => !is_javascript_mime_type(mime_type),
+
// Step 7
- Type::Style => {
- match content_type_header {
- Some(&ContentType(Mime(TopLevel::Text, SubLevel::Css, _))) => false,
- _ => true
- }
- }
+ Some(&ContentType(Mime(ref tl, ref sl, _))) if destination == Destination::Style
+ => *tl != TopLevel::Text && *sl != SubLevel::Css,
+
+ None if destination == Destination::Style || destination.is_script_like() => true,
// Step 8
_ => false
- };
+ }
}
/// <https://fetch.spec.whatwg.org/#should-response-to-request-be-blocked-due-to-mime-type?>
-fn should_be_blocked_due_to_mime_type(request_type: Type, response_headers: &Headers) -> bool {
+fn should_be_blocked_due_to_mime_type(destination: Destination, response_headers: &Headers) -> bool {
+ // Step 1
let mime_type = match response_headers.get::<ContentType>() {
Some(header) => header,
None => return false,
};
- request_type == Type::Script && match *mime_type {
+
+ // Step 2-3
+ destination.is_script_like() && match *mime_type {
ContentType(Mime(TopLevel::Audio, _, _)) |
ContentType(Mime(TopLevel::Video, _, _)) |
ContentType(Mime(TopLevel::Image, _, _)) => true,
ContentType(Mime(TopLevel::Text, SubLevel::Ext(ref ext), _)) => ext == "csv",
+
+ // Step 4
_ => false,
}
}
diff --git a/components/net/http_loader.rs b/components/net/http_loader.rs
index e3972f6c0f3..badb89aaf02 100644
--- a/components/net/http_loader.rs
+++ b/components/net/http_loader.rs
@@ -35,7 +35,7 @@ use msg::constellation_msg::PipelineId;
use net_traits::{CookieSource, FetchMetadata, NetworkError, ReferrerPolicy};
use net_traits::request::{CacheMode, CredentialsMode, Destination, Origin};
use net_traits::request::{RedirectMode, Referrer, Request, RequestMode};
-use net_traits::request::{ResponseTainting, ServiceWorkersMode, Type};
+use net_traits::request::{ResponseTainting, ServiceWorkersMode};
use net_traits::response::{HttpsState, Response, ResponseBody, ResponseType};
use resource_thread::AuthCache;
use servo_url::{ImmutableOrigin, ServoUrl};
@@ -125,13 +125,13 @@ impl WrappedHttpResponse {
}
// Step 3 of https://fetch.spec.whatwg.org/#concept-fetch.
-pub fn set_default_accept(type_: Type, destination: Destination, headers: &mut Headers) {
+pub fn set_default_accept(destination: Destination, headers: &mut Headers) {
if headers.has::<Accept>() {
return;
}
- let value = match (type_, destination) {
+ let value = match destination {
// Step 3.2.
- (_, Destination::Document) => {
+ Destination::Document => {
vec![
qitem(mime!(Text / Html)),
qitem(mime!(Application / ("xhtml+xml"))),
@@ -140,7 +140,7 @@ pub fn set_default_accept(type_: Type, destination: Destination, headers: &mut H
]
},
// Step 3.3.
- (Type::Image, _) => {
+ Destination::Image => {
vec![
qitem(mime!(Image / Png)),
qitem(mime!(Image / ("svg+xml") )),
@@ -149,7 +149,7 @@ pub fn set_default_accept(type_: Type, destination: Destination, headers: &mut H
]
},
// Step 3.3.
- (Type::Style, _) => {
+ Destination::Style => {
vec![
qitem(mime!(Text / Css)),
QualityItem::new(mime!(_ / _), q(0.1))
@@ -1204,7 +1204,6 @@ fn cors_preflight_fetch(request: &Request,
let mut preflight = Request::new(request.current_url(), Some(request.origin.clone()), request.pipeline_id);
preflight.method = Method::Options;
preflight.initiator = request.initiator.clone();
- preflight.type_ = request.type_.clone();
preflight.destination = request.destination.clone();
preflight.origin = request.origin.clone();
preflight.referrer = request.referrer.clone();
diff --git a/components/net/websocket_loader.rs b/components/net/websocket_loader.rs
index dc4253fb594..3a9345cfac5 100644
--- a/components/net/websocket_loader.rs
+++ b/components/net/websocket_loader.rs
@@ -17,7 +17,7 @@ use hyper::status::StatusCode;
use hyper::version::HttpVersion;
use net_traits::{CookieSource, MessageData, NetworkError, WebSocketCommunicate, WebSocketConnectData};
use net_traits::{WebSocketDomAction, WebSocketNetworkEvent};
-use net_traits::request::{Destination, Type};
+use net_traits::request::Destination;
use servo_url::ServoUrl;
use std::ascii::AsciiExt;
use std::io::{self, Write};
@@ -280,7 +280,7 @@ fn fetch(url: ServoUrl,
// TODO: handle request's origin.
// Step 3.
- set_default_accept(Type::None, Destination::None, &mut headers);
+ set_default_accept(Destination::None, &mut headers);
// Step 4.
set_default_accept_language(&mut headers);
@@ -370,7 +370,7 @@ fn main_fetch(url: ServoUrl,
// TODO: handle blocking as mixed content.
// TODO: handle blocking by content security policy.
// Not applicable: blocking due to MIME type matters only for scripts.
- if should_be_blocked_due_to_nosniff(Type::None, &headers) {
+ if should_be_blocked_due_to_nosniff(Destination::None, &headers) {
response = Err(NetworkError::Internal("Request should be blocked due to nosniff.".into()));
}
}
diff --git a/components/net_traits/request.rs b/components/net_traits/request.rs
index 409ff756daa..3fcaa72f585 100644
--- a/components/net_traits/request.rs
+++ b/components/net_traits/request.rs
@@ -19,37 +19,37 @@ pub enum Initiator {
XSLT,
}
-/// A request [type](https://fetch.spec.whatwg.org/#concept-request-type)
-#[derive(Clone, Copy, Deserialize, MallocSizeOf, PartialEq, Serialize)]
-pub enum Type {
- None,
- Audio,
- Font,
- Image,
- Script,
- Style,
- Track,
- Video,
-}
-
/// A request [destination](https://fetch.spec.whatwg.org/#concept-request-destination)
#[derive(Clone, Copy, Deserialize, MallocSizeOf, PartialEq, Serialize)]
pub enum Destination {
None,
+ Audio,
Document,
Embed,
Font,
Image,
Manifest,
- Media,
Object,
Report,
Script,
ServiceWorker,
SharedWorker,
Style,
+ Track,
+ Video,
Worker,
- XSLT,
+ Xslt,
+}
+
+impl Destination {
+ /// https://fetch.spec.whatwg.org/#request-destination-script-like
+ #[inline]
+ pub fn is_script_like(&self) -> bool {
+ *self == Destination::Script ||
+ *self == Destination::ServiceWorker ||
+ *self == Destination::SharedWorker ||
+ *self == Destination::Worker
+ }
}
/// A request [origin](https://fetch.spec.whatwg.org/#concept-request-origin)
@@ -150,7 +150,6 @@ pub struct RequestInit {
pub body: Option<Vec<u8>>,
pub service_workers_mode: ServiceWorkersMode,
// TODO: client object
- pub type_: Type,
pub destination: Destination,
pub synchronous: bool,
pub mode: RequestMode,
@@ -178,7 +177,6 @@ impl Default for RequestInit {
unsafe_request: false,
body: None,
service_workers_mode: ServiceWorkersMode::All,
- type_: Type::None,
destination: Destination::None,
synchronous: false,
mode: RequestMode::NoCors,
@@ -224,8 +222,6 @@ pub struct Request {
pub service_workers_mode: ServiceWorkersMode,
/// <https://fetch.spec.whatwg.org/#concept-request-initiator>
pub initiator: Initiator,
- /// <https://fetch.spec.whatwg.org/#concept-request-type>
- pub type_: Type,
/// <https://fetch.spec.whatwg.org/#concept-request-destination>
pub destination: Destination,
// TODO: priority object
@@ -278,7 +274,6 @@ impl Request {
keep_alive: false,
service_workers_mode: ServiceWorkersMode::All,
initiator: Initiator::None,
- type_: Type::None,
destination: Destination::None,
origin: origin.unwrap_or(Origin::Client),
referrer: Referrer::Client,
@@ -307,7 +302,6 @@ impl Request {
req.unsafe_request = init.unsafe_request;
req.body = init.body;
req.service_workers_mode = init.service_workers_mode;
- req.type_ = init.type_;
req.destination = init.destination;
req.synchronous = init.synchronous;
req.mode = init.mode;
@@ -356,8 +350,9 @@ impl Request {
/// <https://fetch.spec.whatwg.org/#subresource-request>
pub fn is_subresource_request(&self) -> bool {
match self.destination {
- Destination::Font | Destination::Image | Destination::Manifest | Destination::Media |
- Destination::Script | Destination::Style | Destination::XSLT | Destination::None => true,
+ Destination::Audio | Destination::Font | Destination::Image | Destination::Manifest |
+ Destination::Script | Destination::Style | Destination::Track | Destination::Video |
+ Destination::Xslt | Destination::None => true,
_ => false,
}
}
diff --git a/components/script/dom/dedicatedworkerglobalscope.rs b/components/script/dom/dedicatedworkerglobalscope.rs
index 51c52e3f766..6c0f6cef867 100644
--- a/components/script/dom/dedicatedworkerglobalscope.rs
+++ b/components/script/dom/dedicatedworkerglobalscope.rs
@@ -30,7 +30,7 @@ use js::jsapi::{JSAutoCompartment, JSContext, NullHandleValue};
use js::jsval::UndefinedValue;
use msg::constellation_msg::TopLevelBrowsingContextId;
use net_traits::{IpcSend, load_whole_resource};
-use net_traits::request::{CredentialsMode, Destination, RequestInit, Type as RequestType};
+use net_traits::request::{CredentialsMode, Destination, RequestInit};
use script_runtime::{CommonScriptMsg, ScriptChan, ScriptPort, new_rt_and_cx, Runtime};
use script_runtime::ScriptThreadEventCategory::WorkerEvent;
use script_traits::{TimerEvent, TimerSource, WorkerGlobalScopeInit, WorkerScriptLoadOrigin};
@@ -179,7 +179,6 @@ impl DedicatedWorkerGlobalScope {
let request = RequestInit {
url: worker_url.clone(),
- type_: RequestType::Script,
destination: Destination::Worker,
credentials_mode: CredentialsMode::Include,
use_url_credentials: true,
diff --git a/components/script/dom/htmlimageelement.rs b/components/script/dom/htmlimageelement.rs
index 498930624c4..4e4d706be6f 100644
--- a/components/script/dom/htmlimageelement.rs
+++ b/components/script/dom/htmlimageelement.rs
@@ -46,7 +46,7 @@ use net_traits::image::base::{Image, ImageMetadata};
use net_traits::image_cache::{CanRequestImages, ImageCache, ImageOrMetadataAvailable};
use net_traits::image_cache::{ImageResponder, ImageResponse, ImageState, PendingImageId};
use net_traits::image_cache::UsePlaceholder;
-use net_traits::request::{RequestInit, Type as RequestType};
+use net_traits::request::RequestInit;
use network_listener::{NetworkListener, PreInvoke};
use num_traits::ToPrimitive;
use script_thread::ScriptThread;
@@ -275,7 +275,6 @@ impl HTMLImageElement {
let request = RequestInit {
url: img_url.clone(),
origin: document.origin().immutable().clone(),
- type_: RequestType::Image,
pipeline_id: Some(document.global().pipeline_id()),
.. RequestInit::default()
};
diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs
index daddcee4377..1122e267e7e 100644
--- a/components/script/dom/htmlmediaelement.rs
+++ b/components/script/dom/htmlmediaelement.rs
@@ -37,7 +37,7 @@ use ipc_channel::router::ROUTER;
use microtask::{Microtask, MicrotaskRunnable};
use mime::{Mime, SubLevel, TopLevel};
use net_traits::{FetchResponseListener, FetchMetadata, Metadata, NetworkError};
-use net_traits::request::{CredentialsMode, Destination, RequestInit, Type as RequestType};
+use net_traits::request::{CredentialsMode, Destination, RequestInit};
use network_listener::{NetworkListener, PreInvoke};
use script_thread::ScriptThread;
use servo_url::ServoUrl;
@@ -586,14 +586,13 @@ impl HTMLMediaElement {
// Step 4.remote.2.
// FIXME(nox): Handle CORS setting from crossorigin attribute.
let document = document_from_node(self);
- let type_ = match self.media_type_id() {
- HTMLMediaElementTypeId::HTMLAudioElement => RequestType::Audio,
- HTMLMediaElementTypeId::HTMLVideoElement => RequestType::Video,
+ let destination = match self.media_type_id() {
+ HTMLMediaElementTypeId::HTMLAudioElement => Destination::Audio,
+ HTMLMediaElementTypeId::HTMLVideoElement => Destination::Video,
};
let request = RequestInit {
url,
- type_,
- destination: Destination::Media,
+ destination,
credentials_mode: CredentialsMode::Include,
use_url_credentials: true,
origin: document.origin().immutable().clone(),
diff --git a/components/script/dom/htmlscriptelement.rs b/components/script/dom/htmlscriptelement.rs
index 31871104687..8ff45372c88 100644
--- a/components/script/dom/htmlscriptelement.rs
+++ b/components/script/dom/htmlscriptelement.rs
@@ -30,7 +30,7 @@ use ipc_channel::ipc;
use ipc_channel::router::ROUTER;
use js::jsval::UndefinedValue;
use net_traits::{FetchMetadata, FetchResponseListener, Metadata, NetworkError};
-use net_traits::request::{CorsSettings, CredentialsMode, Destination, RequestInit, RequestMode, Type as RequestType};
+use net_traits::request::{CorsSettings, CredentialsMode, Destination, RequestInit, RequestMode};
use network_listener::{NetworkListener, PreInvoke};
use servo_atoms::Atom;
use servo_config::opts;
@@ -238,7 +238,6 @@ fn fetch_a_classic_script(script: &HTMLScriptElement,
// Step 1, 2.
let request = RequestInit {
url: url.clone(),
- type_: RequestType::Script,
destination: Destination::Script,
// https://html.spec.whatwg.org/multipage/#create-a-potential-cors-request
// Step 1
diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs
index a018467b46d..0cc0c584f49 100644
--- a/components/script/dom/request.rs
+++ b/components/script/dom/request.rs
@@ -15,7 +15,6 @@ use dom::bindings::codegen::Bindings::RequestBinding::RequestInit;
use dom::bindings::codegen::Bindings::RequestBinding::RequestMethods;
use dom::bindings::codegen::Bindings::RequestBinding::RequestMode;
use dom::bindings::codegen::Bindings::RequestBinding::RequestRedirect;
-use dom::bindings::codegen::Bindings::RequestBinding::RequestType;
use dom::bindings::error::{Error, Fallible};
use dom::bindings::reflector::{DomObject, Reflector, reflect_dom_object};
use dom::bindings::root::{DomRoot, MutNullableDom};
@@ -36,7 +35,6 @@ use net_traits::request::RedirectMode as NetTraitsRequestRedirect;
use net_traits::request::Referrer as NetTraitsRequestReferrer;
use net_traits::request::Request as NetTraitsRequest;
use net_traits::request::RequestMode as NetTraitsRequestMode;
-use net_traits::request::Type as NetTraitsRequestType;
use servo_url::ServoUrl;
use std::cell::{Cell, Ref};
use std::rc::Rc;
@@ -526,11 +524,6 @@ impl RequestMethods for Request {
self.headers.or_init(|| Headers::new(&self.global()))
}
- // https://fetch.spec.whatwg.org/#dom-request-type
- fn Type(&self) -> RequestType {
- self.request.borrow().type_.into()
- }
-
// https://fetch.spec.whatwg.org/#dom-request-destination
fn Destination(&self) -> RequestDestination {
self.request.borrow().destination.into()
@@ -703,20 +696,21 @@ impl Into<NetTraitsRequestDestination> for RequestDestination {
fn into(self) -> NetTraitsRequestDestination {
match self {
RequestDestination::_empty => NetTraitsRequestDestination::None,
+ RequestDestination::Audio => NetTraitsRequestDestination::Audio,
RequestDestination::Document => NetTraitsRequestDestination::Document,
RequestDestination::Embed => NetTraitsRequestDestination::Embed,
RequestDestination::Font => NetTraitsRequestDestination::Font,
RequestDestination::Image => NetTraitsRequestDestination::Image,
RequestDestination::Manifest => NetTraitsRequestDestination::Manifest,
- RequestDestination::Media => NetTraitsRequestDestination::Media,
RequestDestination::Object => NetTraitsRequestDestination::Object,
RequestDestination::Report => NetTraitsRequestDestination::Report,
RequestDestination::Script => NetTraitsRequestDestination::Script,
- RequestDestination::Serviceworker => NetTraitsRequestDestination::ServiceWorker,
RequestDestination::Sharedworker => NetTraitsRequestDestination::SharedWorker,
RequestDestination::Style => NetTraitsRequestDestination::Style,
+ RequestDestination::Track => NetTraitsRequestDestination::Track,
+ RequestDestination::Video => NetTraitsRequestDestination::Video,
RequestDestination::Worker => NetTraitsRequestDestination::Worker,
- RequestDestination::Xslt => NetTraitsRequestDestination::XSLT,
+ RequestDestination::Xslt => NetTraitsRequestDestination::Xslt,
}
}
}
@@ -725,50 +719,23 @@ impl Into<RequestDestination> for NetTraitsRequestDestination {
fn into(self) -> RequestDestination {
match self {
NetTraitsRequestDestination::None => RequestDestination::_empty,
+ NetTraitsRequestDestination::Audio => RequestDestination::Audio,
NetTraitsRequestDestination::Document => RequestDestination::Document,
NetTraitsRequestDestination::Embed => RequestDestination::Embed,
NetTraitsRequestDestination::Font => RequestDestination::Font,
NetTraitsRequestDestination::Image => RequestDestination::Image,
NetTraitsRequestDestination::Manifest => RequestDestination::Manifest,
- NetTraitsRequestDestination::Media => RequestDestination::Media,
NetTraitsRequestDestination::Object => RequestDestination::Object,
NetTraitsRequestDestination::Report => RequestDestination::Report,
NetTraitsRequestDestination::Script => RequestDestination::Script,
- NetTraitsRequestDestination::ServiceWorker => RequestDestination::Serviceworker,
+ NetTraitsRequestDestination::ServiceWorker
+ => panic!("ServiceWorker request destination should not be exposed to DOM"),
NetTraitsRequestDestination::SharedWorker => RequestDestination::Sharedworker,
NetTraitsRequestDestination::Style => RequestDestination::Style,
- NetTraitsRequestDestination::XSLT => RequestDestination::Xslt,
+ NetTraitsRequestDestination::Track => RequestDestination::Track,
+ NetTraitsRequestDestination::Video => RequestDestination::Video,
NetTraitsRequestDestination::Worker => RequestDestination::Worker,
- }
- }
-}
-
-impl Into<NetTraitsRequestType> for RequestType {
- fn into(self) -> NetTraitsRequestType {
- match self {
- RequestType::_empty => NetTraitsRequestType::None,
- RequestType::Audio => NetTraitsRequestType::Audio,
- RequestType::Font => NetTraitsRequestType::Font,
- RequestType::Image => NetTraitsRequestType::Image,
- RequestType::Script => NetTraitsRequestType::Script,
- RequestType::Style => NetTraitsRequestType::Style,
- RequestType::Track => NetTraitsRequestType::Track,
- RequestType::Video => NetTraitsRequestType::Video,
- }
- }
-}
-
-impl Into<RequestType> for NetTraitsRequestType {
- fn into(self) -> RequestType {
- match self {
- NetTraitsRequestType::None => RequestType::_empty,
- NetTraitsRequestType::Audio => RequestType::Audio,
- NetTraitsRequestType::Font => RequestType::Font,
- NetTraitsRequestType::Image => RequestType::Image,
- NetTraitsRequestType::Script => RequestType::Script,
- NetTraitsRequestType::Style => RequestType::Style,
- NetTraitsRequestType::Track => RequestType::Track,
- NetTraitsRequestType::Video => RequestType::Video,
+ NetTraitsRequestDestination::Xslt => RequestDestination::Xslt,
}
}
}
diff --git a/components/script/dom/serviceworkerglobalscope.rs b/components/script/dom/serviceworkerglobalscope.rs
index 7e59bde875c..85b65b10578 100644
--- a/components/script/dom/serviceworkerglobalscope.rs
+++ b/components/script/dom/serviceworkerglobalscope.rs
@@ -23,7 +23,7 @@ use ipc_channel::router::ROUTER;
use js::jsapi::{JS_SetInterruptCallback, JSAutoCompartment, JSContext};
use js::jsval::UndefinedValue;
use net_traits::{load_whole_resource, IpcSend, CustomResponseMediator};
-use net_traits::request::{CredentialsMode, Destination, RequestInit, Type as RequestType};
+use net_traits::request::{CredentialsMode, Destination, RequestInit};
use script_runtime::{CommonScriptMsg, ScriptChan, new_rt_and_cx, Runtime};
use script_traits::{TimerEvent, WorkerGlobalScopeInit, ScopeThings, ServiceWorkerMsg, WorkerScriptLoadOrigin};
use servo_config::prefs::PREFS;
@@ -161,7 +161,6 @@ impl ServiceWorkerGlobalScope {
let request = RequestInit {
url: script_url.clone(),
- type_: RequestType::Script,
destination: Destination::ServiceWorker,
credentials_mode: CredentialsMode::Include,
use_url_credentials: true,
diff --git a/components/script/dom/webidls/Request.webidl b/components/script/dom/webidls/Request.webidl
index 95efc97937a..8ce58a5867e 100644
--- a/components/script/dom/webidls/Request.webidl
+++ b/components/script/dom/webidls/Request.webidl
@@ -13,7 +13,7 @@ interface Request {
readonly attribute ByteString method;
readonly attribute USVString url;
[SameObject] readonly attribute Headers headers;
- readonly attribute RequestType type;
+
readonly attribute RequestDestination destination;
readonly attribute USVString referrer;
readonly attribute ReferrerPolicy referrerPolicy;
@@ -22,6 +22,7 @@ interface Request {
readonly attribute RequestCache cache;
readonly attribute RequestRedirect redirect;
readonly attribute DOMString integrity;
+
[NewObject, Throws] Request clone();
};
@@ -41,31 +42,21 @@ dictionary RequestInit {
any window; // can only be set to null
};
-enum RequestType {
- "",
- "audio",
- "font",
- "image",
- "script",
- "style",
- "track",
- "video"
-};
-
enum RequestDestination {
"",
+ "audio",
"document",
"embed",
"font",
"image",
"manifest",
- "media",
"object",
"report",
"script",
- "serviceworker",
"sharedworker",
"style",
+ "track",
+ "video",
"worker",
"xslt"
};
diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs
index 4ebfd67a486..0dfc2a83196 100644
--- a/components/script/dom/workerglobalscope.rs
+++ b/components/script/dom/workerglobalscope.rs
@@ -30,7 +30,7 @@ use js::jsapi::{HandleValue, JSAutoCompartment, JSContext, JSRuntime};
use js::jsval::UndefinedValue;
use js::panic::maybe_resume_unwind;
use net_traits::{IpcSend, load_whole_resource};
-use net_traits::request::{CredentialsMode, Destination, RequestInit as NetRequestInit, Type as RequestType};
+use net_traits::request::{CredentialsMode, Destination, RequestInit as NetRequestInit};
use script_runtime::{CommonScriptMsg, ScriptChan, ScriptPort, get_reports, Runtime};
use script_traits::{TimerEvent, TimerEventId};
use script_traits::WorkerGlobalScopeInit;
@@ -199,7 +199,6 @@ impl WorkerGlobalScopeMethods for WorkerGlobalScope {
let global_scope = self.upcast::<GlobalScope>();
let request = NetRequestInit {
url: url.clone(),
- type_: RequestType::Script,
destination: Destination::Script,
credentials_mode: CredentialsMode::Include,
use_url_credentials: true,
diff --git a/components/script/dom/worklet.rs b/components/script/dom/worklet.rs
index ca48ec08fe8..f7d50ae4df3 100644
--- a/components/script/dom/worklet.rs
+++ b/components/script/dom/worklet.rs
@@ -43,7 +43,6 @@ use net_traits::load_whole_resource;
use net_traits::request::Destination;
use net_traits::request::RequestInit;
use net_traits::request::RequestMode;
-use net_traits::request::Type as RequestType;
use script_runtime::CommonScriptMsg;
use script_runtime::Runtime;
use script_runtime::ScriptThreadEventCategory;
@@ -573,7 +572,6 @@ impl WorkletThread {
let resource_fetcher = self.global_init.resource_threads.sender();
let request = RequestInit {
url: script_url,
- type_: RequestType::Script,
destination: Destination::Script,
mode: RequestMode::CorsMode,
credentials_mode: credentials.into(),
diff --git a/components/script/fetch.rs b/components/script/fetch.rs
index edfe9040c41..655a9f19f04 100644
--- a/components/script/fetch.rs
+++ b/components/script/fetch.rs
@@ -49,7 +49,6 @@ fn request_init_from_request(request: NetTraitsRequest) -> NetTraitsRequestInit
headers: request.headers.clone(),
unsafe_request: request.unsafe_request,
body: request.body.clone(),
- type_: request.type_,
destination: request.destination,
synchronous: request.synchronous,
mode: request.mode,
diff --git a/components/script/layout_image.rs b/components/script/layout_image.rs
index 4877be1907e..6cbdd292fe1 100644
--- a/components/script/layout_image.rs
+++ b/components/script/layout_image.rs
@@ -13,7 +13,7 @@ use ipc_channel::ipc;
use ipc_channel::router::ROUTER;
use net_traits::{FetchResponseMsg, FetchResponseListener, FetchMetadata, NetworkError};
use net_traits::image_cache::{ImageCache, PendingImageId};
-use net_traits::request::{Type as RequestType, RequestInit as FetchRequestInit};
+use net_traits::request::{Destination, RequestInit as FetchRequestInit};
use network_listener::{NetworkListener, PreInvoke};
use servo_url::ServoUrl;
use std::sync::{Arc, Mutex};
@@ -71,7 +71,7 @@ pub fn fetch_image_for_layout(url: ServoUrl,
let request = FetchRequestInit {
url: url,
origin: document.origin().immutable().clone(),
- type_: RequestType::Image,
+ destination: Destination::Image,
pipeline_id: Some(document.global().pipeline_id()),
.. FetchRequestInit::default()
};
diff --git a/components/script/stylesheet_loader.rs b/components/script/stylesheet_loader.rs
index 3444cb0af02..094eff5b022 100644
--- a/components/script/stylesheet_loader.rs
+++ b/components/script/stylesheet_loader.rs
@@ -21,7 +21,7 @@ use hyper_serde::Serde;
use ipc_channel::ipc;
use ipc_channel::router::ROUTER;
use net_traits::{FetchResponseListener, FetchMetadata, FilteredMetadata, Metadata, NetworkError, ReferrerPolicy};
-use net_traits::request::{CorsSettings, CredentialsMode, Destination, RequestInit, RequestMode, Type as RequestType};
+use net_traits::request::{CorsSettings, CredentialsMode, Destination, RequestInit, RequestMode};
use network_listener::{NetworkListener, PreInvoke};
use parking_lot::RwLock;
use servo_arc::Arc;
@@ -247,7 +247,6 @@ impl<'a> StylesheetLoader<'a> {
let request = RequestInit {
url: url.clone(),
- type_: RequestType::Style,
destination: Destination::Style,
// https://html.spec.whatwg.org/multipage/#create-a-potential-cors-request
// Step 1
diff --git a/tests/unit/net/fetch.rs b/tests/unit/net/fetch.rs
index 796ddf0ff18..5c1f6fa793c 100644
--- a/tests/unit/net/fetch.rs
+++ b/tests/unit/net/fetch.rs
@@ -32,7 +32,7 @@ use net::test::HttpState;
use net_traits::IncludeSubdomains;
use net_traits::NetworkError;
use net_traits::ReferrerPolicy;
-use net_traits::request::{Origin, RedirectMode, Referrer, Request, RequestMode, Type};
+use net_traits::request::{Destination, Origin, RedirectMode, Referrer, Request, RequestMode};
use net_traits::response::{CacheState, Response, ResponseBody, ResponseType};
use servo_config::resource_files::resources_dir_path;
use servo_url::{ImmutableOrigin, ServoUrl};
@@ -610,7 +610,7 @@ fn test_fetch_with_sri_sucess() {
#[test]
fn test_fetch_blocked_nosniff() {
#[inline]
- fn test_nosniff_request(request_type: Type,
+ fn test_nosniff_request(destination: Destination,
mime: Mime,
should_error: bool) {
const MESSAGE: &'static [u8] = b"";
@@ -631,7 +631,7 @@ fn test_fetch_blocked_nosniff() {
let origin = Origin::Origin(url.origin());
let mut request = Request::new(url, Some(origin), None);
- request.type_ = request_type;
+ request.destination = destination;
let fetch_response = fetch(&mut request, None);
let _ = server.close();
@@ -639,14 +639,14 @@ fn test_fetch_blocked_nosniff() {
}
let tests = vec![
- (Type::Script, Mime(TopLevel::Text, SubLevel::Javascript, vec![]), false),
- (Type::Script, Mime(TopLevel::Text, SubLevel::Css, vec![]), true),
- (Type::Style, Mime(TopLevel::Text, SubLevel::Css, vec![]), false),
+ (Destination::Script, Mime(TopLevel::Text, SubLevel::Javascript, vec![]), false),
+ (Destination::Script, Mime(TopLevel::Text, SubLevel::Css, vec![]), true),
+ (Destination::Style, Mime(TopLevel::Text, SubLevel::Css, vec![]), false),
];
for test in tests {
- let (type_, mime, should_error) = test;
- test_nosniff_request(type_, mime, should_error);
+ let (destination, mime, should_error) = test;
+ test_nosniff_request(destination, mime, should_error);
}
}
diff --git a/tests/wpt/metadata/fetch/api/request/request-type-attribute-historical.html.ini b/tests/wpt/metadata/fetch/api/request/request-type-attribute-historical.html.ini
deleted file mode 100644
index 38d61a7f7cc..00000000000
--- a/tests/wpt/metadata/fetch/api/request/request-type-attribute-historical.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[request-type-attribute-historical.html]
- type: testharness
- ['type' getter should not exist on Request objects]
- expected: FAIL
-