From e566bc7b1c65e54601f5420bfa071bab9c1b83a3 Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Fri, 9 Jun 2017 13:57:30 +0200 Subject: Update the WebIDL parser --- components/script/dom/request.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index f33c9eed48d..65882c1b4ed 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -311,9 +311,9 @@ impl Request { try!(headers_copy.fill(Some( HeadersInit::ByteStringSequenceSequence(init_sequence.clone())))); }, - &HeadersInit::ByteStringMozMap(ref init_map) => { + &HeadersInit::StringByteStringRecord(ref init_map) => { try!(headers_copy.fill(Some( - HeadersInit::ByteStringMozMap(init_map.clone())))); + HeadersInit::StringByteStringRecord(init_map.clone())))); }, } } @@ -880,8 +880,8 @@ impl Clone for HeadersInit { HeadersInit::Headers(h.clone()), &HeadersInit::ByteStringSequenceSequence(ref b) => HeadersInit::ByteStringSequenceSequence(b.clone()), - &HeadersInit::ByteStringMozMap(ref m) => - HeadersInit::ByteStringMozMap(m.clone()), + &HeadersInit::StringByteStringRecord(ref m) => + HeadersInit::StringByteStringRecord(m.clone()), } } } -- cgit v1.2.3 From 7af5a7fd5409ab8db0274eb829136e5953e718ed Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Sun, 18 Jun 2017 13:21:32 +0200 Subject: Untry script --- components/script/dom/request.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 65882c1b4ed..5894eae8de7 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -308,12 +308,12 @@ impl Request { headers_copy = Root::from_ref(&*init_headers); } &HeadersInit::ByteStringSequenceSequence(ref init_sequence) => { - try!(headers_copy.fill(Some( - HeadersInit::ByteStringSequenceSequence(init_sequence.clone())))); + headers_copy.fill(Some( + HeadersInit::ByteStringSequenceSequence(init_sequence.clone())))?; }, &HeadersInit::StringByteStringRecord(ref init_map) => { - try!(headers_copy.fill(Some( - HeadersInit::StringByteStringRecord(init_map.clone())))); + headers_copy.fill(Some( + HeadersInit::StringByteStringRecord(init_map.clone())))?; }, } } @@ -351,10 +351,10 @@ impl Request { // but an input with headers is given, set request's // headers as the input's Headers. if let RequestInfo::Request(ref input_request) = input { - try!(r.Headers().fill(Some(HeadersInit::Headers(input_request.Headers())))); + r.Headers().fill(Some(HeadersInit::Headers(input_request.Headers())))?; } }, - Some(HeadersInit::Headers(_)) => try!(r.Headers().fill(Some(HeadersInit::Headers(headers_copy)))), + Some(HeadersInit::Headers(_)) => r.Headers().fill(Some(HeadersInit::Headers(headers_copy)))?, _ => {}, } @@ -391,8 +391,8 @@ impl Request { // Step 34.3 if let Some(contents) = content_type { if !r.Headers().Has(ByteString::new(b"Content-Type".to_vec())).unwrap() { - try!(r.Headers().Append(ByteString::new(b"Content-Type".to_vec()), - ByteString::new(contents.as_bytes().to_vec()))); + r.Headers().Append(ByteString::new(b"Content-Type".to_vec()), + ByteString::new(contents.as_bytes().to_vec()))?; } } } @@ -446,7 +446,7 @@ impl Request { *r_clone.request.borrow_mut() = req.clone(); r_clone.body_used.set(body_used); *r_clone.mime_type.borrow_mut() = mime_type; - try!(r_clone.Headers().fill(Some(HeadersInit::Headers(r.Headers())))); + r_clone.Headers().fill(Some(HeadersInit::Headers(r.Headers())))?; r_clone.Headers().set_guard(headers_guard); Ok(r_clone) } -- cgit v1.2.3 From 6adc653083b0366f2b87ca49bf16a908fe32e4d6 Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Thu, 22 Jun 2017 23:48:07 -0700 Subject: Introduce service-worker mode --- components/script/dom/request.rs | 36 ++++++++++-------------------------- 1 file changed, 10 insertions(+), 26 deletions(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 5894eae8de7..82b7773fc3e 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -55,14 +55,11 @@ pub struct Request { impl Request { fn new_inherited(global: &GlobalScope, - url: ServoUrl, - is_service_worker_global_scope: bool) -> Request { + url: ServoUrl) -> Request { Request { reflector_: Reflector::new(), request: DOMRefCell::new( - net_request_from_global(global, - url, - is_service_worker_global_scope)), + net_request_from_global(global, url)), body_used: Cell::new(false), headers: Default::default(), mime_type: DOMRefCell::new("".to_string().into_bytes()), @@ -71,11 +68,9 @@ impl Request { } pub fn new(global: &GlobalScope, - url: ServoUrl, - is_service_worker_global_scope: bool) -> Root { + url: ServoUrl) -> Root { reflect_dom_object(box Request::new_inherited(global, - url, - is_service_worker_global_scope), + url), global, RequestBinding::Wrap) } @@ -111,9 +106,7 @@ impl Request { return Err(Error::Type("Url includes credentials".to_string())) } // Step 5.4 - temporary_request = net_request_from_global(global, - url, - false); + temporary_request = net_request_from_global(global, url); // Step 5.5 fallback_mode = Some(NetTraitsRequestMode::CorsMode); // Step 5.6 @@ -152,9 +145,7 @@ impl Request { // Step 12 let mut request: NetTraitsRequest; - request = net_request_from_global(global, - temporary_request.current_url(), - false); + request = net_request_from_global(global, temporary_request.current_url()); request.method = temporary_request.method; request.headers = temporary_request.headers.clone(); request.unsafe_request = true; @@ -293,9 +284,7 @@ impl Request { } // Step 26 - let r = Request::from_net_request(global, - false, - request); + let r = Request::from_net_request(global, request); r.headers.or_init(|| Headers::for_request(&r.global())); // Step 27 @@ -421,11 +410,9 @@ impl Request { impl Request { fn from_net_request(global: &GlobalScope, - is_service_worker_global_scope: bool, net_request: NetTraitsRequest) -> Root { let r = Request::new(global, - net_request.current_url(), - is_service_worker_global_scope); + net_request.current_url()); *r.request.borrow_mut() = net_request; r } @@ -433,11 +420,10 @@ impl Request { fn clone_from(r: &Request) -> Fallible> { let req = r.request.borrow(); let url = req.url(); - let is_service_worker_global_scope = req.is_service_worker_global_scope; let body_used = r.body_used.get(); let mime_type = r.mime_type.borrow().clone(); let headers_guard = r.Headers().get_guard(); - let r_clone = Request::new(&r.global(), url, is_service_worker_global_scope); + let r_clone = Request::new(&r.global(), url); r_clone.request.borrow_mut().pipeline_id = req.pipeline_id; { let mut borrowed_r_request = r_clone.request.borrow_mut(); @@ -457,13 +443,11 @@ impl Request { } fn net_request_from_global(global: &GlobalScope, - url: ServoUrl, - is_service_worker_global_scope: bool) -> NetTraitsRequest { + url: ServoUrl) -> NetTraitsRequest { let origin = Origin::Origin(global.get_url().origin()); let pipeline_id = global.pipeline_id(); NetTraitsRequest::new(url, Some(origin), - is_service_worker_global_scope, Some(pipeline_id)) } -- cgit v1.2.3 From befe5384725bdc20f16b2eff76009c67d01b6bac Mon Sep 17 00:00:00 2001 From: Corey Farwell Date: Thu, 27 Jul 2017 09:52:15 +0000 Subject: Utilize match_ignore_ascii_case! in more places. --- components/script/dom/request.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 82b7773fc3e..9abfb4b0eb4 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -38,7 +38,6 @@ 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::ascii::AsciiExt; use std::cell::{Cell, Ref}; use std::rc::Rc; @@ -453,15 +452,16 @@ fn net_request_from_global(global: &GlobalScope, // https://fetch.spec.whatwg.org/#concept-method-normalize fn normalize_method(m: &str) -> HttpMethod { - match m { - m if m.eq_ignore_ascii_case("DELETE") => HttpMethod::Delete, - m if m.eq_ignore_ascii_case("GET") => HttpMethod::Get, - m if m.eq_ignore_ascii_case("HEAD") => HttpMethod::Head, - m if m.eq_ignore_ascii_case("OPTIONS") => HttpMethod::Options, - m if m.eq_ignore_ascii_case("POST") => HttpMethod::Post, - m if m.eq_ignore_ascii_case("PUT") => HttpMethod::Put, - m => HttpMethod::Extension(m.to_string()), - } + match_ignore_ascii_case! { m, + "delete" => return HttpMethod::Delete, + "get" => return HttpMethod::Get, + "head" => return HttpMethod::Head, + "options" => return HttpMethod::Options, + "post" => return HttpMethod::Post, + "put" => return HttpMethod::Put, + _ => (), + } + HttpMethod::Extension(m.to_string()) } // https://fetch.spec.whatwg.org/#concept-method -- cgit v1.2.3 From 96f9cc77e69a79e9b805d3c71899775eb5d0b271 Mon Sep 17 00:00:00 2001 From: Daniel Kolsoi Date: Mon, 25 Sep 2017 19:11:30 -0400 Subject: Removed integrity check and test for no-cors requests Also updated request-headers.html manifest hash --- components/script/dom/request.rs | 4 ---- 1 file changed, 4 deletions(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 9abfb4b0eb4..8a673e85455 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -324,10 +324,6 @@ impl Request { "The mode is 'no-cors' but the method is not a cors-safelisted method".to_string())); } // Step 30.2 - if !borrowed_request.integrity_metadata.is_empty() { - return Err(Error::Type("Integrity metadata is not an empty string".to_string())); - } - // Step 30.3 r.Headers().set_guard(Guard::RequestNoCors); } -- cgit v1.2.3 From 0e3c54c1911ba2c3bf305ee04f04fcd9bf2fc2fe Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Mon, 25 Sep 2017 23:30:24 +0200 Subject: Rename dom::bindings::js to dom::bindings::root --- components/script/dom/request.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 9abfb4b0eb4..70835465093 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -17,8 +17,8 @@ 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::js::{MutNullableJS, Root}; use dom::bindings::reflector::{DomObject, Reflector, reflect_dom_object}; +use dom::bindings::root::{MutNullableJS, Root}; use dom::bindings::str::{ByteString, DOMString, USVString}; use dom::bindings::trace::RootedTraceableBox; use dom::globalscope::GlobalScope; -- cgit v1.2.3 From 7be32fb2371a14ba61b008a37e79761f66c073c7 Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Mon, 25 Sep 2017 23:56:32 +0200 Subject: Rename JS to Dom --- components/script/dom/request.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 70835465093..1225369cea5 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -796,7 +796,7 @@ impl Into for NetTraitsRequestMode { NetTraitsRequestMode::SameOrigin => RequestMode::Same_origin, NetTraitsRequestMode::NoCors => RequestMode::No_cors, NetTraitsRequestMode::CorsMode => RequestMode::Cors, - NetTraitsRequestMode::WebSocket => unreachable!("Websocket request mode should never be exposed to JS"), + NetTraitsRequestMode::WebSocket => unreachable!("Websocket request mode should never be exposed to Dom"), } } } -- cgit v1.2.3 From c52fd0a78041ec22db1c4b391556368cd8b87b02 Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Tue, 26 Sep 2017 01:21:01 +0200 Subject: Rename MutNullableJS to MutNullableDom --- components/script/dom/request.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 1225369cea5..1d9d20629d0 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -18,7 +18,7 @@ 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::{MutNullableJS, Root}; +use dom::bindings::root::{MutNullableDom, Root}; use dom::bindings::str::{ByteString, DOMString, USVString}; use dom::bindings::trace::RootedTraceableBox; use dom::globalscope::GlobalScope; @@ -46,7 +46,7 @@ pub struct Request { reflector_: Reflector, request: DOMRefCell, body_used: Cell, - headers: MutNullableJS, + headers: MutNullableDom, mime_type: DOMRefCell>, #[ignore_heap_size_of = "Rc"] body_promise: DOMRefCell, BodyType)>>, -- cgit v1.2.3 From 577370746e2ce3da7fa25a20b8e1bbeed319df65 Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Tue, 26 Sep 2017 01:32:40 +0200 Subject: Rename DOMRefCell to DomRefCell I don't want to do such a gratuitous rename, but with all the other types now having "Dom" as part of their name, and especially with "DomOnceCell", I feel like the other cell type that we already have should also follow the convention. That argument loses weight though when we realise there is still DOMString and other things. --- components/script/dom/request.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 1d9d20629d0..6f7f5518c57 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -3,7 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use body::{BodyOperations, BodyType, consume_body}; -use dom::bindings::cell::DOMRefCell; +use dom::bindings::cell::DomRefCell; use dom::bindings::codegen::Bindings::HeadersBinding::{HeadersInit, HeadersMethods}; use dom::bindings::codegen::Bindings::RequestBinding; use dom::bindings::codegen::Bindings::RequestBinding::ReferrerPolicy; @@ -44,12 +44,12 @@ use std::rc::Rc; #[dom_struct] pub struct Request { reflector_: Reflector, - request: DOMRefCell, + request: DomRefCell, body_used: Cell, headers: MutNullableDom, - mime_type: DOMRefCell>, + mime_type: DomRefCell>, #[ignore_heap_size_of = "Rc"] - body_promise: DOMRefCell, BodyType)>>, + body_promise: DomRefCell, BodyType)>>, } impl Request { @@ -57,12 +57,12 @@ impl Request { url: ServoUrl) -> Request { Request { reflector_: Reflector::new(), - request: DOMRefCell::new( + request: DomRefCell::new( net_request_from_global(global, url)), body_used: Cell::new(false), headers: Default::default(), - mime_type: DOMRefCell::new("".to_string().into_bytes()), - body_promise: DOMRefCell::new(None), + mime_type: DomRefCell::new("".to_string().into_bytes()), + body_promise: DomRefCell::new(None), } } -- cgit v1.2.3 From f87c2a8d7616112ca924e30292db2d244cf87eec Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Tue, 26 Sep 2017 01:53:40 +0200 Subject: Rename Root to DomRoot In a later PR, DomRoot will become a type alias of Root>, where Root will be able to handle all the things that need to be rooted that have a stable traceable address that doesn't move for the whole lifetime of the root. Stay tuned. --- components/script/dom/request.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 6f7f5518c57..68cb961c085 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -18,7 +18,7 @@ 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::{MutNullableDom, Root}; +use dom::bindings::root::{DomRoot, MutNullableDom}; use dom::bindings::str::{ByteString, DOMString, USVString}; use dom::bindings::trace::RootedTraceableBox; use dom::globalscope::GlobalScope; @@ -67,7 +67,7 @@ impl Request { } pub fn new(global: &GlobalScope, - url: ServoUrl) -> Root { + url: ServoUrl) -> DomRoot { reflect_dom_object(box Request::new_inherited(global, url), global, RequestBinding::Wrap) @@ -77,7 +77,7 @@ impl Request { pub fn Constructor(global: &GlobalScope, input: RequestInfo, init: RootedTraceableBox) - -> Fallible> { + -> Fallible> { // Step 1 let temporary_request: NetTraitsRequest; @@ -293,7 +293,7 @@ impl Request { if let Some(possible_header) = init.headers.as_ref() { match possible_header { &HeadersInit::Headers(ref init_headers) => { - headers_copy = Root::from_ref(&*init_headers); + headers_copy = DomRoot::from_ref(&*init_headers); } &HeadersInit::ByteStringSequenceSequence(ref init_sequence) => { headers_copy.fill(Some( @@ -310,7 +310,7 @@ impl Request { // We cannot empty `r.Headers().header_list` because // we would undo the Step 27 above. One alternative is to set // `headers_copy` as a deep copy of `r.Headers()`. However, - // `r.Headers()` is a `Root`, and therefore it is difficult + // `r.Headers()` is a `DomRoot`, and therefore it is difficult // to obtain a mutable reference to `r.Headers()`. Without the // mutable reference, we cannot mutate `r.Headers()` to be the // deep copied headers in Step 27. @@ -409,14 +409,14 @@ impl Request { impl Request { fn from_net_request(global: &GlobalScope, - net_request: NetTraitsRequest) -> Root { + net_request: NetTraitsRequest) -> DomRoot { let r = Request::new(global, net_request.current_url()); *r.request.borrow_mut() = net_request; r } - fn clone_from(r: &Request) -> Fallible> { + fn clone_from(r: &Request) -> Fallible> { let req = r.request.borrow(); let url = req.url(); let body_used = r.body_used.get(); @@ -527,7 +527,7 @@ impl RequestMethods for Request { } // https://fetch.spec.whatwg.org/#dom-request-headers - fn Headers(&self) -> Root { + fn Headers(&self) -> DomRoot { self.headers.or_init(|| Headers::new(&self.global())) } @@ -594,7 +594,7 @@ impl RequestMethods for Request { } // https://fetch.spec.whatwg.org/#dom-request-clone - fn Clone(&self) -> Fallible> { + fn Clone(&self) -> Fallible> { // Step 1 if request_is_locked(self) { return Err(Error::Type("Request is locked".to_string())); -- cgit v1.2.3 From aa15dc269f41503d81ad44cd7e85d69e6f4aeac7 Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Mon, 16 Oct 2017 14:35:30 +0200 Subject: Remove use of unstable box syntax. http://www.robohornet.org gives a score of 101.36 on master, and 102.68 with this PR. The latter is slightly better, but probably within noise level. So it looks like this PR does not affect DOM performance. This is expected since `Box::new` is defined as: ```rust impl Box { #[inline(always)] pub fn new(x: T) -> Box { box x } } ``` With inlining, it should compile to the same as box syntax. --- components/script/dom/request.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 204a7084f0a..a4bfbf96f83 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -68,8 +68,7 @@ impl Request { pub fn new(global: &GlobalScope, url: ServoUrl) -> DomRoot { - reflect_dom_object(box Request::new_inherited(global, - url), + reflect_dom_object(Box::new(Request::new_inherited(global, url)), global, RequestBinding::Wrap) } -- cgit v1.2.3 From 4506f0d30cbbb02df32e9c16135ef288ad6b7e2e Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Wed, 18 Oct 2017 10:42:01 +1100 Subject: Replace all uses of the `heapsize` crate with `malloc_size_of`. Servo currently uses `heapsize`, but Stylo/Gecko use `malloc_size_of`. `malloc_size_of` is better -- it handles various cases that `heapsize` does not -- so this patch changes Servo to use `malloc_size_of`. This patch makes the following changes to the `malloc_size_of` crate. - Adds `MallocSizeOf` trait implementations for numerous types, some built-in (e.g. `VecDeque`), some external and Servo-only (e.g. `string_cache`). - Makes `enclosing_size_of_op` optional, because vanilla jemalloc doesn't support that operation. - For `HashSet`/`HashMap`, falls back to a computed estimate when `enclosing_size_of_op` isn't available. - Adds an extern "C" `malloc_size_of` function that does the actual heap measurement; this is based on the same functions from the `heapsize` crate. This patch makes the following changes elsewhere. - Converts all the uses of `heapsize` to instead use `malloc_size_of`. - Disables the "heapsize"/"heap_size" feature for the external crates that provide it. - Removes the `HeapSizeOf` implementation from `hashglobe`. - Adds `ignore` annotations to a few `Rc`/`Arc`, because `malloc_size_of` doesn't derive those types, unlike `heapsize`. --- components/script/dom/request.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index a4bfbf96f83..a018467b46d 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -48,7 +48,7 @@ pub struct Request { body_used: Cell, headers: MutNullableDom, mime_type: DomRefCell>, - #[ignore_heap_size_of = "Rc"] + #[ignore_malloc_size_of = "Rc"] body_promise: DomRefCell, BodyType)>>, } -- cgit v1.2.3 From c6bb1cb9d553c13a20dace3e32b9643c433caa1e Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Sat, 21 Oct 2017 06:39:23 -0700 Subject: Merge request type and destination --- components/script/dom/request.rs | 53 ++++++++-------------------------------- 1 file changed, 10 insertions(+), 43 deletions(-) (limited to 'components/script/dom/request.rs') 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 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 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 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 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, } } } -- cgit v1.2.3 From 99f9696a24ece562f74831dbde957af1149eb9eb Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Wed, 11 Oct 2017 22:32:48 -0700 Subject: Merge functionality of WebsocketConnect into Fetch --- components/script/dom/request.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 0cc0c584f49..f0b28f59b69 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -549,7 +549,7 @@ impl RequestMethods for Request { // https://fetch.spec.whatwg.org/#dom-request-mode fn Mode(&self) -> RequestMode { - self.request.borrow().mode.into() + self.request.borrow().mode.clone().into() } // https://fetch.spec.whatwg.org/#dom-request-credentials @@ -758,7 +758,8 @@ impl Into for NetTraitsRequestMode { NetTraitsRequestMode::SameOrigin => RequestMode::Same_origin, NetTraitsRequestMode::NoCors => RequestMode::No_cors, NetTraitsRequestMode::CorsMode => RequestMode::Cors, - NetTraitsRequestMode::WebSocket => unreachable!("Websocket request mode should never be exposed to Dom"), + NetTraitsRequestMode::WebSocket { .. } => + unreachable!("Websocket request mode should never be exposed to Dom"), } } } -- cgit v1.2.3 From d196f3de621770ecf38a6349bc8cd00c0aa7aa07 Mon Sep 17 00:00:00 2001 From: Gregory Terzian Date: Sun, 12 Nov 2017 14:11:50 +0800 Subject: copy headers from script request to net request --- components/script/dom/request.rs | 3 +++ 1 file changed, 3 insertions(+) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index f0b28f59b69..fcd396c1176 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -339,6 +339,9 @@ impl Request { _ => {}, } + // Copy the headers list onto the headers of net_traits::Request + r.request.borrow_mut().headers = r.Headers().get_headers_list(); + // Step 32 let mut input_body = if let RequestInfo::Request(ref input_request) = input { let input_request_request = input_request.request.borrow(); -- cgit v1.2.3 From b98635f2122b5c1c47252b351994a0b2c6bc2140 Mon Sep 17 00:00:00 2001 From: Gregory Terzian Date: Wed, 15 Nov 2017 10:16:16 +0800 Subject: allow unknown HTTP methods --- components/script/dom/request.rs | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index fcd396c1176..85998533ae9 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -462,17 +462,7 @@ fn normalize_method(m: &str) -> HttpMethod { // https://fetch.spec.whatwg.org/#concept-method fn is_method(m: &ByteString) -> bool { - match m.to_lower().as_str() { - Some("get") => true, - Some("head") => true, - Some("post") => true, - Some("put") => true, - Some("delete") => true, - Some("connect") => true, - Some("options") => true, - Some("trace") => true, - _ => false, - } + m.as_str().is_some() } // https://fetch.spec.whatwg.org/#forbidden-method -- cgit v1.2.3 From c0b5eeef575356b05472a5a6759c9eaedbe9cd4d Mon Sep 17 00:00:00 2001 From: OJ Kwon Date: Fri, 23 Mar 2018 12:11:41 -0700 Subject: feat(webidl): expose arraybuffer overload in body idl --- components/script/dom/request.rs | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 85998533ae9..b3bb2f1afe1 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -611,6 +611,12 @@ impl RequestMethods for Request { fn Json(&self) -> Rc { consume_body(self, BodyType::Json) } + + #[allow(unrooted_must_root)] + // https://fetch.spec.whatwg.org/#dom-body-arraybuffer + fn ArrayBuffer(&self) -> Rc { + consume_body(self, BodyType::ArrayBuffer) + } } impl BodyOperations for Request { -- cgit v1.2.3 From af3741ab262562922d63add32099b2b941057f98 Mon Sep 17 00:00:00 2001 From: tigercosmos Date: Mon, 16 Jul 2018 09:48:36 -0700 Subject: Make fetch() API use same-origin credentials by default --- components/script/dom/request.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index b3bb2f1afe1..60935093647 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -106,7 +106,7 @@ impl Request { // Step 5.5 fallback_mode = Some(NetTraitsRequestMode::CorsMode); // Step 5.6 - fallback_credentials = Some(NetTraitsRequestCredentials::Omit); + fallback_credentials = Some(NetTraitsRequestCredentials::CredentialsSameOrigin); } // Step 6 RequestInfo::Request(ref input_request) => { -- cgit v1.2.3 From c37a345dc9f4dda6ea29c42f96f6c7201c42cbac Mon Sep 17 00:00:00 2001 From: chansuke Date: Tue, 18 Sep 2018 23:24:15 +0900 Subject: Format script component --- components/script/dom/request.rs | 209 +++++++++++++++++++++++---------------- 1 file changed, 122 insertions(+), 87 deletions(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 60935093647..0415aba9203 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -51,12 +51,10 @@ pub struct Request { } impl Request { - fn new_inherited(global: &GlobalScope, - url: ServoUrl) -> Request { + fn new_inherited(global: &GlobalScope, url: ServoUrl) -> Request { Request { reflector_: Reflector::new(), - request: DomRefCell::new( - net_request_from_global(global, url)), + request: DomRefCell::new(net_request_from_global(global, url)), body_used: Cell::new(false), headers: Default::default(), mime_type: DomRefCell::new("".to_string().into_bytes()), @@ -64,17 +62,20 @@ impl Request { } } - pub fn new(global: &GlobalScope, - url: ServoUrl) -> DomRoot { - reflect_dom_object(Box::new(Request::new_inherited(global, url)), - global, RequestBinding::Wrap) + pub fn new(global: &GlobalScope, url: ServoUrl) -> DomRoot { + reflect_dom_object( + Box::new(Request::new_inherited(global, url)), + global, + RequestBinding::Wrap, + ) } // https://fetch.spec.whatwg.org/#dom-request - pub fn Constructor(global: &GlobalScope, - input: RequestInfo, - init: RootedTraceableBox) - -> Fallible> { + pub fn Constructor( + global: &GlobalScope, + input: RequestInfo, + init: RootedTraceableBox, + ) -> Fallible> { // Step 1 let temporary_request: NetTraitsRequest; @@ -94,12 +95,12 @@ impl Request { let parsed_url = base_url.join(&usv_string); // Step 5.2 if parsed_url.is_err() { - return Err(Error::Type("Url could not be parsed".to_string())) + return Err(Error::Type("Url could not be parsed".to_string())); } // Step 5.3 let url = parsed_url.unwrap(); if includes_credentials(&url) { - return Err(Error::Type("Url includes credentials".to_string())) + return Err(Error::Type("Url includes credentials".to_string())); } // Step 5.4 temporary_request = net_request_from_global(global, url); @@ -107,16 +108,16 @@ impl Request { fallback_mode = Some(NetTraitsRequestMode::CorsMode); // Step 5.6 fallback_credentials = Some(NetTraitsRequestCredentials::CredentialsSameOrigin); - } + }, // Step 6 RequestInfo::Request(ref input_request) => { // Step 6.1 if request_is_disturbed(input_request) || request_is_locked(input_request) { - return Err(Error::Type("Input is disturbed or locked".to_string())) + return Err(Error::Type("Input is disturbed or locked".to_string())); } // Step 6.2 temporary_request = input_request.request.borrow().clone(); - } + }, } // Step 7 @@ -131,7 +132,7 @@ impl Request { // Step 10 if !init.window.handle().is_null_or_undefined() { - return Err(Error::Type("Window is present and is not null".to_string())) + return Err(Error::Type("Window is present and is not null".to_string())); } // Step 11 @@ -167,16 +168,17 @@ impl Request { init.redirect.is_some() || init.referrer.is_some() || init.referrerPolicy.is_some() || - !init.window.handle().is_undefined() { - // Step 13.1 - if request.mode == NetTraitsRequestMode::Navigate { - request.mode = NetTraitsRequestMode::SameOrigin; - } - // Step 13.2 - request.referrer = NetTraitsRequestReferrer::Client; - // Step 13.3 - request.referrer_policy = None; + !init.window.handle().is_undefined() + { + // Step 13.1 + if request.mode == NetTraitsRequestMode::Navigate { + request.mode = NetTraitsRequestMode::SameOrigin; } + // Step 13.2 + request.referrer = NetTraitsRequestReferrer::Client; + // Step 13.3 + request.referrer_policy = None; + } // Step 14 if let Some(init_referrer) = init.referrer.as_ref() { @@ -190,20 +192,20 @@ impl Request { let parsed_referrer = base_url.join(referrer); // Step 14.4 if parsed_referrer.is_err() { - return Err(Error::Type( - "Failed to parse referrer url".to_string())); + return Err(Error::Type("Failed to parse referrer url".to_string())); } // Step 14.5 if let Ok(parsed_referrer) = parsed_referrer { if (parsed_referrer.cannot_be_a_base() && parsed_referrer.scheme() == "about" && parsed_referrer.path() == "client") || - parsed_referrer.origin() != origin { - request.referrer = NetTraitsRequestReferrer::Client; - } else { - // Step 14.6 - request.referrer = NetTraitsRequestReferrer::ReferrerUrl(parsed_referrer); - } + parsed_referrer.origin() != origin + { + request.referrer = NetTraitsRequestReferrer::Client; + } else { + // Step 14.6 + request.referrer = NetTraitsRequestReferrer::ReferrerUrl(parsed_referrer); + } } } } @@ -215,7 +217,11 @@ impl Request { } // Step 16 - let mode = init.mode.as_ref().map(|m| m.clone().into()).or(fallback_mode); + let mode = init + .mode + .as_ref() + .map(|m| m.clone().into()) + .or(fallback_mode); // Step 17 if let Some(NetTraitsRequestMode::Navigate) = mode { @@ -228,7 +234,11 @@ impl Request { } // Step 19 - let credentials = init.credentials.as_ref().map(|m| m.clone().into()).or(fallback_credentials); + let credentials = init + .credentials + .as_ref() + .map(|m| m.clone().into()) + .or(fallback_credentials); // Step 20 if let Some(c) = credentials { @@ -245,7 +255,8 @@ impl Request { if request.cache_mode == NetTraitsRequestCache::OnlyIfCached { if request.mode != NetTraitsRequestMode::SameOrigin { return Err(Error::Type( - "Cache is 'only-if-cached' and mode is not 'same-origin'".to_string())); + "Cache is 'only-if-cached' and mode is not 'same-origin'".to_string(), + )); } } @@ -291,14 +302,15 @@ impl Request { match possible_header { &HeadersInit::Headers(ref init_headers) => { headers_copy = DomRoot::from_ref(&*init_headers); - } + }, &HeadersInit::ByteStringSequenceSequence(ref init_sequence) => { - headers_copy.fill(Some( - HeadersInit::ByteStringSequenceSequence(init_sequence.clone())))?; + headers_copy.fill(Some(HeadersInit::ByteStringSequenceSequence( + init_sequence.clone(), + )))?; }, &HeadersInit::StringByteStringRecord(ref init_map) => { - headers_copy.fill(Some( - HeadersInit::StringByteStringRecord(init_map.clone())))?; + headers_copy + .fill(Some(HeadersInit::StringByteStringRecord(init_map.clone())))?; }, } } @@ -318,7 +330,9 @@ impl Request { // Step 30.1 if !is_cors_safelisted_method(&borrowed_request.method) { return Err(Error::Type( - "The mode is 'no-cors' but the method is not a cors-safelisted method".to_string())); + "The mode is 'no-cors' but the method is not a cors-safelisted method" + .to_string(), + )); } // Step 30.2 r.Headers().set_guard(Guard::RequestNoCors); @@ -332,10 +346,13 @@ impl Request { // but an input with headers is given, set request's // headers as the input's Headers. if let RequestInfo::Request(ref input_request) = input { - r.Headers().fill(Some(HeadersInit::Headers(input_request.Headers())))?; + r.Headers() + .fill(Some(HeadersInit::Headers(input_request.Headers())))?; } }, - Some(HeadersInit::Headers(_)) => r.Headers().fill(Some(HeadersInit::Headers(headers_copy)))?, + Some(HeadersInit::Headers(_)) => { + r.Headers().fill(Some(HeadersInit::Headers(headers_copy)))? + }, _ => {}, } @@ -356,10 +373,16 @@ impl Request { let req = r.request.borrow(); let req_method = &req.method; match *req_method { - HttpMethod::Get => return Err(Error::Type( - "Init's body is non-null, and request method is GET".to_string())), - HttpMethod::Head => return Err(Error::Type( - "Init's body is non-null, and request method is HEAD".to_string())), + HttpMethod::Get => { + return Err(Error::Type( + "Init's body is non-null, and request method is GET".to_string(), + )) + }, + HttpMethod::Head => { + return Err(Error::Type( + "Init's body is non-null, and request method is HEAD".to_string(), + )) + }, _ => {}, } } @@ -374,9 +397,15 @@ impl Request { // Step 34.3 if let Some(contents) = content_type { - if !r.Headers().Has(ByteString::new(b"Content-Type".to_vec())).unwrap() { - r.Headers().Append(ByteString::new(b"Content-Type".to_vec()), - ByteString::new(contents.as_bytes().to_vec()))?; + if !r + .Headers() + .Has(ByteString::new(b"Content-Type".to_vec())) + .unwrap() + { + r.Headers().Append( + ByteString::new(b"Content-Type".to_vec()), + ByteString::new(contents.as_bytes().to_vec()), + )?; } } } @@ -404,10 +433,8 @@ impl Request { } impl Request { - fn from_net_request(global: &GlobalScope, - net_request: NetTraitsRequest) -> DomRoot { - let r = Request::new(global, - net_request.current_url()); + fn from_net_request(global: &GlobalScope, net_request: NetTraitsRequest) -> DomRoot { + let r = Request::new(global, net_request.current_url()); *r.request.borrow_mut() = net_request; r } @@ -427,7 +454,9 @@ impl Request { *r_clone.request.borrow_mut() = req.clone(); r_clone.body_used.set(body_used); *r_clone.mime_type.borrow_mut() = mime_type; - r_clone.Headers().fill(Some(HeadersInit::Headers(r.Headers())))?; + r_clone + .Headers() + .fill(Some(HeadersInit::Headers(r.Headers())))?; r_clone.Headers().set_guard(headers_guard); Ok(r_clone) } @@ -437,13 +466,10 @@ impl Request { } } -fn net_request_from_global(global: &GlobalScope, - url: ServoUrl) -> NetTraitsRequest { +fn net_request_from_global(global: &GlobalScope, url: ServoUrl) -> NetTraitsRequest { let origin = Origin::Origin(global.get_url().origin()); let pipeline_id = global.pipeline_id(); - NetTraitsRequest::new(url, - Some(origin), - Some(pipeline_id)) + NetTraitsRequest::new(url, Some(origin), Some(pipeline_id)) } // https://fetch.spec.whatwg.org/#concept-method-normalize @@ -477,9 +503,7 @@ fn is_forbidden_method(m: &ByteString) -> bool { // https://fetch.spec.whatwg.org/#cors-safelisted-method fn is_cors_safelisted_method(m: &HttpMethod) -> bool { - m == &HttpMethod::Get || - m == &HttpMethod::Head || - m == &HttpMethod::Post + m == &HttpMethod::Get || m == &HttpMethod::Head || m == &HttpMethod::Post } // https://url.spec.whatwg.org/#include-credentials @@ -531,13 +555,17 @@ impl RequestMethods for Request { NetTraitsRequestReferrer::ReferrerUrl(ref u) => { let u_c = u.clone(); u_c.into_string() - } + }, }) } // https://fetch.spec.whatwg.org/#dom-request-referrerpolicy fn ReferrerPolicy(&self) -> ReferrerPolicy { - self.request.borrow().referrer_policy.map(|m| m.into()).unwrap_or(ReferrerPolicy::_empty) + self.request + .borrow() + .referrer_policy + .map(|m| m.into()) + .unwrap_or(ReferrerPolicy::_empty) } // https://fetch.spec.whatwg.org/#dom-request-mode @@ -727,8 +755,9 @@ impl Into for NetTraitsRequestDestination { NetTraitsRequestDestination::Object => RequestDestination::Object, NetTraitsRequestDestination::Report => RequestDestination::Report, NetTraitsRequestDestination::Script => RequestDestination::Script, - NetTraitsRequestDestination::ServiceWorker - => panic!("ServiceWorker request destination should not be exposed to DOM"), + NetTraitsRequestDestination::ServiceWorker => { + panic!("ServiceWorker request destination should not be exposed to DOM") + }, NetTraitsRequestDestination::SharedWorker => RequestDestination::Sharedworker, NetTraitsRequestDestination::Style => RequestDestination::Style, NetTraitsRequestDestination::Track => RequestDestination::Track, @@ -757,8 +786,9 @@ impl Into for NetTraitsRequestMode { NetTraitsRequestMode::SameOrigin => RequestMode::Same_origin, NetTraitsRequestMode::NoCors => RequestMode::No_cors, NetTraitsRequestMode::CorsMode => RequestMode::Cors, - NetTraitsRequestMode::WebSocket { .. } => - unreachable!("Websocket request mode should never be exposed to Dom"), + NetTraitsRequestMode::WebSocket { .. } => { + unreachable!("Websocket request mode should never be exposed to Dom") + }, } } } @@ -770,14 +800,16 @@ impl Into for ReferrerPolicy { match self { ReferrerPolicy::_empty => MsgReferrerPolicy::NoReferrer, ReferrerPolicy::No_referrer => MsgReferrerPolicy::NoReferrer, - ReferrerPolicy::No_referrer_when_downgrade => - MsgReferrerPolicy::NoReferrerWhenDowngrade, + ReferrerPolicy::No_referrer_when_downgrade => { + MsgReferrerPolicy::NoReferrerWhenDowngrade + }, ReferrerPolicy::Origin => MsgReferrerPolicy::Origin, ReferrerPolicy::Origin_when_cross_origin => MsgReferrerPolicy::OriginWhenCrossOrigin, ReferrerPolicy::Unsafe_url => MsgReferrerPolicy::UnsafeUrl, ReferrerPolicy::Strict_origin => MsgReferrerPolicy::StrictOrigin, - ReferrerPolicy::Strict_origin_when_cross_origin => - MsgReferrerPolicy::StrictOriginWhenCrossOrigin, + ReferrerPolicy::Strict_origin_when_cross_origin => { + MsgReferrerPolicy::StrictOriginWhenCrossOrigin + }, } } } @@ -786,15 +818,17 @@ impl Into for MsgReferrerPolicy { fn into(self) -> ReferrerPolicy { match self { MsgReferrerPolicy::NoReferrer => ReferrerPolicy::No_referrer, - MsgReferrerPolicy::NoReferrerWhenDowngrade => - ReferrerPolicy::No_referrer_when_downgrade, + MsgReferrerPolicy::NoReferrerWhenDowngrade => { + ReferrerPolicy::No_referrer_when_downgrade + }, MsgReferrerPolicy::Origin => ReferrerPolicy::Origin, MsgReferrerPolicy::SameOrigin => ReferrerPolicy::Origin, MsgReferrerPolicy::OriginWhenCrossOrigin => ReferrerPolicy::Origin_when_cross_origin, MsgReferrerPolicy::UnsafeUrl => ReferrerPolicy::Unsafe_url, MsgReferrerPolicy::StrictOrigin => ReferrerPolicy::Strict_origin, - MsgReferrerPolicy::StrictOriginWhenCrossOrigin => - ReferrerPolicy::Strict_origin_when_cross_origin, + MsgReferrerPolicy::StrictOriginWhenCrossOrigin => { + ReferrerPolicy::Strict_origin_when_cross_origin + }, } } } @@ -821,13 +855,14 @@ impl Into for NetTraitsRequestRedirect { impl Clone for HeadersInit { fn clone(&self) -> HeadersInit { - match self { - &HeadersInit::Headers(ref h) => - HeadersInit::Headers(h.clone()), - &HeadersInit::ByteStringSequenceSequence(ref b) => - HeadersInit::ByteStringSequenceSequence(b.clone()), - &HeadersInit::StringByteStringRecord(ref m) => - HeadersInit::StringByteStringRecord(m.clone()), + match self { + &HeadersInit::Headers(ref h) => HeadersInit::Headers(h.clone()), + &HeadersInit::ByteStringSequenceSequence(ref b) => { + HeadersInit::ByteStringSequenceSequence(b.clone()) + }, + &HeadersInit::StringByteStringRecord(ref m) => { + HeadersInit::StringByteStringRecord(m.clone()) + }, } } } -- cgit v1.2.3 From 024b40b39d3848f1a1f7020bd7ed8c901817f09c Mon Sep 17 00:00:00 2001 From: Bastien Orivel Date: Mon, 27 Aug 2018 18:36:52 +0200 Subject: Update hyper to 0.12 --- components/script/dom/request.rs | 41 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 21 deletions(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 0415aba9203..ceb64ec45ce 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -25,7 +25,8 @@ use dom::headers::{Guard, Headers}; use dom::promise::Promise; use dom::xmlhttprequest::Extractable; use dom_struct::dom_struct; -use hyper::method::Method as HttpMethod; +use http::Method as HttpMethod; +use http::method::InvalidMethod; use net_traits::ReferrerPolicy as MsgReferrerPolicy; use net_traits::request::{Origin, Window}; use net_traits::request::CacheMode as NetTraitsRequestCache; @@ -38,6 +39,7 @@ use net_traits::request::RequestMode as NetTraitsRequestMode; use servo_url::ServoUrl; use std::cell::{Cell, Ref}; use std::rc::Rc; +use std::str::FromStr; #[dom_struct] pub struct Request { @@ -283,7 +285,7 @@ impl Request { } // Step 25.2 let method = match init_method.as_str() { - Some(s) => normalize_method(s), + Some(s) => normalize_method(s).map_err(|e| Error::Type(format!("Method is not valid: {:?}", e)))?, None => return Err(Error::Type("Method is not a valid UTF8".to_string())), }; // Step 25.3 @@ -373,16 +375,10 @@ impl Request { let req = r.request.borrow(); let req_method = &req.method; match *req_method { - HttpMethod::Get => { - return Err(Error::Type( - "Init's body is non-null, and request method is GET".to_string(), - )) - }, - HttpMethod::Head => { - return Err(Error::Type( - "Init's body is non-null, and request method is HEAD".to_string(), - )) - }, + HttpMethod::GET => return Err(Error::Type( + "Init's body is non-null, and request method is GET".to_string())), + HttpMethod::HEAD => return Err(Error::Type( + "Init's body is non-null, and request method is HEAD".to_string())), _ => {}, } } @@ -473,17 +469,18 @@ fn net_request_from_global(global: &GlobalScope, url: ServoUrl) -> NetTraitsRequ } // https://fetch.spec.whatwg.org/#concept-method-normalize -fn normalize_method(m: &str) -> HttpMethod { +fn normalize_method(m: &str) -> Result { match_ignore_ascii_case! { m, - "delete" => return HttpMethod::Delete, - "get" => return HttpMethod::Get, - "head" => return HttpMethod::Head, - "options" => return HttpMethod::Options, - "post" => return HttpMethod::Post, - "put" => return HttpMethod::Put, + "delete" => return Ok(HttpMethod::DELETE), + "get" => return Ok(HttpMethod::GET), + "head" => return Ok(HttpMethod::HEAD), + "options" => return Ok(HttpMethod::OPTIONS), + "post" => return Ok(HttpMethod::POST), + "put" => return Ok(HttpMethod::PUT), _ => (), } - HttpMethod::Extension(m.to_string()) + debug!("Method: {:?}", m); + HttpMethod::from_str(m) } // https://fetch.spec.whatwg.org/#concept-method @@ -503,7 +500,9 @@ fn is_forbidden_method(m: &ByteString) -> bool { // https://fetch.spec.whatwg.org/#cors-safelisted-method fn is_cors_safelisted_method(m: &HttpMethod) -> bool { - m == &HttpMethod::Get || m == &HttpMethod::Head || m == &HttpMethod::Post + m == &HttpMethod::GET || + m == &HttpMethod::HEAD || + m == &HttpMethod::POST } // https://url.spec.whatwg.org/#include-credentials -- cgit v1.2.3 From 45f7199eee82c66637ec68287eafa40a651001c4 Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Thu, 1 Nov 2018 23:45:06 +0100 Subject: `cargo fix --edition` --- components/script/dom/request.rs | 44 ++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 22 deletions(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index ceb64ec45ce..8a6d7108a0f 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -2,28 +2,28 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -use body::{BodyOperations, BodyType, consume_body}; -use dom::bindings::cell::DomRefCell; -use dom::bindings::codegen::Bindings::HeadersBinding::{HeadersInit, HeadersMethods}; -use dom::bindings::codegen::Bindings::RequestBinding; -use dom::bindings::codegen::Bindings::RequestBinding::ReferrerPolicy; -use dom::bindings::codegen::Bindings::RequestBinding::RequestCache; -use dom::bindings::codegen::Bindings::RequestBinding::RequestCredentials; -use dom::bindings::codegen::Bindings::RequestBinding::RequestDestination; -use dom::bindings::codegen::Bindings::RequestBinding::RequestInfo; -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::error::{Error, Fallible}; -use dom::bindings::reflector::{DomObject, Reflector, reflect_dom_object}; -use dom::bindings::root::{DomRoot, MutNullableDom}; -use dom::bindings::str::{ByteString, DOMString, USVString}; -use dom::bindings::trace::RootedTraceableBox; -use dom::globalscope::GlobalScope; -use dom::headers::{Guard, Headers}; -use dom::promise::Promise; -use dom::xmlhttprequest::Extractable; +use crate::body::{BodyOperations, BodyType, consume_body}; +use crate::dom::bindings::cell::DomRefCell; +use crate::dom::bindings::codegen::Bindings::HeadersBinding::{HeadersInit, HeadersMethods}; +use crate::dom::bindings::codegen::Bindings::RequestBinding; +use crate::dom::bindings::codegen::Bindings::RequestBinding::ReferrerPolicy; +use crate::dom::bindings::codegen::Bindings::RequestBinding::RequestCache; +use crate::dom::bindings::codegen::Bindings::RequestBinding::RequestCredentials; +use crate::dom::bindings::codegen::Bindings::RequestBinding::RequestDestination; +use crate::dom::bindings::codegen::Bindings::RequestBinding::RequestInfo; +use crate::dom::bindings::codegen::Bindings::RequestBinding::RequestInit; +use crate::dom::bindings::codegen::Bindings::RequestBinding::RequestMethods; +use crate::dom::bindings::codegen::Bindings::RequestBinding::RequestMode; +use crate::dom::bindings::codegen::Bindings::RequestBinding::RequestRedirect; +use crate::dom::bindings::error::{Error, Fallible}; +use crate::dom::bindings::reflector::{DomObject, Reflector, reflect_dom_object}; +use crate::dom::bindings::root::{DomRoot, MutNullableDom}; +use crate::dom::bindings::str::{ByteString, DOMString, USVString}; +use crate::dom::bindings::trace::RootedTraceableBox; +use crate::dom::globalscope::GlobalScope; +use crate::dom::headers::{Guard, Headers}; +use crate::dom::promise::Promise; +use crate::dom::xmlhttprequest::Extractable; use dom_struct::dom_struct; use http::Method as HttpMethod; use http::method::InvalidMethod; -- cgit v1.2.3 From cb07debcb6f3d3561177ce536c320986720791b7 Mon Sep 17 00:00:00 2001 From: Pyfisch Date: Tue, 6 Nov 2018 13:01:35 +0100 Subject: Format remaining files --- components/script/dom/request.rs | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 8a6d7108a0f..139931375f7 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -285,7 +285,8 @@ impl Request { } // Step 25.2 let method = match init_method.as_str() { - Some(s) => normalize_method(s).map_err(|e| Error::Type(format!("Method is not valid: {:?}", e)))?, + Some(s) => normalize_method(s) + .map_err(|e| Error::Type(format!("Method is not valid: {:?}", e)))?, None => return Err(Error::Type("Method is not a valid UTF8".to_string())), }; // Step 25.3 @@ -375,10 +376,16 @@ impl Request { let req = r.request.borrow(); let req_method = &req.method; match *req_method { - HttpMethod::GET => return Err(Error::Type( - "Init's body is non-null, and request method is GET".to_string())), - HttpMethod::HEAD => return Err(Error::Type( - "Init's body is non-null, and request method is HEAD".to_string())), + HttpMethod::GET => { + return Err(Error::Type( + "Init's body is non-null, and request method is GET".to_string(), + )) + }, + HttpMethod::HEAD => { + return Err(Error::Type( + "Init's body is non-null, and request method is HEAD".to_string(), + )) + }, _ => {}, } } @@ -500,9 +507,7 @@ fn is_forbidden_method(m: &ByteString) -> bool { // https://fetch.spec.whatwg.org/#cors-safelisted-method fn is_cors_safelisted_method(m: &HttpMethod) -> bool { - m == &HttpMethod::GET || - m == &HttpMethod::HEAD || - m == &HttpMethod::POST + m == &HttpMethod::GET || m == &HttpMethod::HEAD || m == &HttpMethod::POST } // https://url.spec.whatwg.org/#include-credentials -- cgit v1.2.3 From 9e92eb205a2a12fe0be883e42cb7f82deebc9031 Mon Sep 17 00:00:00 2001 From: Pyfisch Date: Tue, 6 Nov 2018 20:38:02 +0100 Subject: Reorder imports --- components/script/dom/request.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 139931375f7..d07e393e8da 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -2,7 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -use crate::body::{BodyOperations, BodyType, consume_body}; +use crate::body::{consume_body, BodyOperations, BodyType}; use crate::dom::bindings::cell::DomRefCell; use crate::dom::bindings::codegen::Bindings::HeadersBinding::{HeadersInit, HeadersMethods}; use crate::dom::bindings::codegen::Bindings::RequestBinding; @@ -16,7 +16,7 @@ use crate::dom::bindings::codegen::Bindings::RequestBinding::RequestMethods; use crate::dom::bindings::codegen::Bindings::RequestBinding::RequestMode; use crate::dom::bindings::codegen::Bindings::RequestBinding::RequestRedirect; use crate::dom::bindings::error::{Error, Fallible}; -use crate::dom::bindings::reflector::{DomObject, Reflector, reflect_dom_object}; +use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector}; use crate::dom::bindings::root::{DomRoot, MutNullableDom}; use crate::dom::bindings::str::{ByteString, DOMString, USVString}; use crate::dom::bindings::trace::RootedTraceableBox; @@ -25,10 +25,8 @@ use crate::dom::headers::{Guard, Headers}; use crate::dom::promise::Promise; use crate::dom::xmlhttprequest::Extractable; use dom_struct::dom_struct; -use http::Method as HttpMethod; use http::method::InvalidMethod; -use net_traits::ReferrerPolicy as MsgReferrerPolicy; -use net_traits::request::{Origin, Window}; +use http::Method as HttpMethod; use net_traits::request::CacheMode as NetTraitsRequestCache; use net_traits::request::CredentialsMode as NetTraitsRequestCredentials; use net_traits::request::Destination as NetTraitsRequestDestination; @@ -36,6 +34,8 @@ 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::{Origin, Window}; +use net_traits::ReferrerPolicy as MsgReferrerPolicy; use servo_url::ServoUrl; use std::cell::{Cell, Ref}; use std::rc::Rc; -- cgit v1.2.3 From a1a14459c141afc6ac6771b8a6c9ca374537edf2 Mon Sep 17 00:00:00 2001 From: Jan Andre Ikenmeyer Date: Mon, 19 Nov 2018 14:47:12 +0100 Subject: Update MPL license to https (part 3) --- components/script/dom/request.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index d07e393e8da..438c49a6407 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -1,6 +1,6 @@ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use crate::body::{consume_body, BodyOperations, BodyType}; use crate::dom::bindings::cell::DomRefCell; -- cgit v1.2.3 From be69f9c3e6a6f5efb5ba1edd50955cb12c111bf8 Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Fri, 14 Dec 2018 08:31:30 +0100 Subject: Rustfmt has changed its default style :/ --- components/script/dom/request.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 438c49a6407..4a7ae2482a4 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -379,12 +379,12 @@ impl Request { HttpMethod::GET => { return Err(Error::Type( "Init's body is non-null, and request method is GET".to_string(), - )) + )); }, HttpMethod::HEAD => { return Err(Error::Type( "Init's body is non-null, and request method is HEAD".to_string(), - )) + )); }, _ => {}, } -- cgit v1.2.3 From 611dc4bc70bf654ab52d9d88f29247c82b142c22 Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Thu, 3 Jan 2019 16:29:49 -0800 Subject: Remove now-unnecessary must_root and allow(unrooted_must_root) annotations --- components/script/dom/request.rs | 5 ----- 1 file changed, 5 deletions(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 4a7ae2482a4..647845d6835 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -620,31 +620,26 @@ impl RequestMethods for Request { Request::clone_from(self) } - #[allow(unrooted_must_root)] // https://fetch.spec.whatwg.org/#dom-body-text fn Text(&self) -> Rc { consume_body(self, BodyType::Text) } - #[allow(unrooted_must_root)] // https://fetch.spec.whatwg.org/#dom-body-blob fn Blob(&self) -> Rc { consume_body(self, BodyType::Blob) } - #[allow(unrooted_must_root)] // https://fetch.spec.whatwg.org/#dom-body-formdata fn FormData(&self) -> Rc { consume_body(self, BodyType::FormData) } - #[allow(unrooted_must_root)] // https://fetch.spec.whatwg.org/#dom-body-json fn Json(&self) -> Rc { consume_body(self, BodyType::Json) } - #[allow(unrooted_must_root)] // https://fetch.spec.whatwg.org/#dom-body-arraybuffer fn ArrayBuffer(&self) -> Rc { consume_body(self, BodyType::ArrayBuffer) -- cgit v1.2.3 From 2440e0f98ade12cf595fe7c791a1065b29b53d74 Mon Sep 17 00:00:00 2001 From: Russell Cousineau Date: Sun, 24 Mar 2019 23:04:17 -0700 Subject: set referrer in window.load_url - this conforms to follow-hyperlinks spec step 13 - this conforms to window-open spec step 14.3 - replace uses of `referrer_url` with `referrer` - in Request class, change "no-referrer" to "" - set websocket fetch referrer to "no-referrer" --- components/script/dom/request.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 647845d6835..b777dd0cb56 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -554,7 +554,7 @@ impl RequestMethods for Request { fn Referrer(&self) -> USVString { let r = self.request.borrow(); USVString(match r.referrer { - NetTraitsRequestReferrer::NoReferrer => String::from("no-referrer"), + NetTraitsRequestReferrer::NoReferrer => String::from(""), NetTraitsRequestReferrer::Client => String::from("about:client"), NetTraitsRequestReferrer::ReferrerUrl(ref u) => { let u_c = u.clone(); -- cgit v1.2.3 From b697621b05d5c0b741d377637cb9c16ef31986b9 Mon Sep 17 00:00:00 2001 From: Kagami Sascha Rosylight Date: Tue, 15 Oct 2019 17:14:00 +0900 Subject: Support WebIDL `record<>` --- components/script/dom/request.rs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index b777dd0cb56..5393288c633 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -311,9 +311,10 @@ impl Request { init_sequence.clone(), )))?; }, - &HeadersInit::StringByteStringRecord(ref init_map) => { - headers_copy - .fill(Some(HeadersInit::StringByteStringRecord(init_map.clone())))?; + &HeadersInit::ByteStringByteStringRecord(ref init_map) => { + headers_copy.fill(Some(HeadersInit::ByteStringByteStringRecord( + init_map.clone(), + )))?; }, } } @@ -859,8 +860,8 @@ impl Clone for HeadersInit { &HeadersInit::ByteStringSequenceSequence(ref b) => { HeadersInit::ByteStringSequenceSequence(b.clone()) }, - &HeadersInit::StringByteStringRecord(ref m) => { - HeadersInit::StringByteStringRecord(m.clone()) + &HeadersInit::ByteStringByteStringRecord(ref m) => { + HeadersInit::ByteStringByteStringRecord(m.clone()) }, } } -- cgit v1.2.3 From b8f3e8bb2e9bed269a06134c902a139cfa42eb1c Mon Sep 17 00:00:00 2001 From: Michael Howell Date: Sat, 28 Sep 2019 19:42:40 +0000 Subject: Add simple implementation of content-security-policy on scripts / styles This needs a lot more hooks before it'll actually be a good implementation, but for a start it can help get some feedback on if this is the right way to go about it. Part of servo/servo#4577 --- components/script/dom/request.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 5393288c633..d22d4680355 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -755,7 +755,9 @@ impl Into for NetTraitsRequestDestination { NetTraitsRequestDestination::Object => RequestDestination::Object, NetTraitsRequestDestination::Report => RequestDestination::Report, NetTraitsRequestDestination::Script => RequestDestination::Script, - NetTraitsRequestDestination::ServiceWorker => { + NetTraitsRequestDestination::ServiceWorker | + NetTraitsRequestDestination::AudioWorklet | + NetTraitsRequestDestination::PaintWorklet => { panic!("ServiceWorker request destination should not be exposed to DOM") }, NetTraitsRequestDestination::SharedWorker => RequestDestination::Sharedworker, -- cgit v1.2.3 From 67827debd85c7076c05277e976732593f9fa043e Mon Sep 17 00:00:00 2001 From: Patrick Shaughnessy Date: Tue, 10 Dec 2019 15:39:40 -0500 Subject: Now just one is_cors_safelisted_request_header, with closer spec alignment --- components/script/dom/request.rs | 145 +++++++++++++++++++++++---------------- 1 file changed, 85 insertions(+), 60 deletions(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index d22d4680355..03e5dee683d 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -90,59 +90,63 @@ impl Request { // Step 4 let base_url = global.api_base_url(); + // Step 5 TODO: "Let signal be null." + match input { - // Step 5 + // Step 6 RequestInfo::USVString(USVString(ref usv_string)) => { - // Step 5.1 + // Step 6.1 let parsed_url = base_url.join(&usv_string); - // Step 5.2 + // Step 6.2 if parsed_url.is_err() { return Err(Error::Type("Url could not be parsed".to_string())); } - // Step 5.3 + // Step 6.3 let url = parsed_url.unwrap(); if includes_credentials(&url) { return Err(Error::Type("Url includes credentials".to_string())); } - // Step 5.4 + // Step 6.4 temporary_request = net_request_from_global(global, url); - // Step 5.5 + // Step 6.5 fallback_mode = Some(NetTraitsRequestMode::CorsMode); - // Step 5.6 + // Step 6.6 fallback_credentials = Some(NetTraitsRequestCredentials::CredentialsSameOrigin); }, - // Step 6 + // Step 7 RequestInfo::Request(ref input_request) => { - // Step 6.1 + // This looks like Step 38 + // TODO do this in the right place to not mask other errors if request_is_disturbed(input_request) || request_is_locked(input_request) { return Err(Error::Type("Input is disturbed or locked".to_string())); } - // Step 6.2 + // Step 7.1 temporary_request = input_request.request.borrow().clone(); + // Step 7.2 TODO: "Set signal to input's signal." }, } - // Step 7 + // Step 8 // TODO: `entry settings object` is not implemented yet. let origin = base_url.origin(); - // Step 8 + // Step 9 let mut window = Window::Client; - // Step 9 + // Step 10 // TODO: `environment settings object` is not implemented in Servo yet. - // Step 10 + // Step 11 if !init.window.handle().is_null_or_undefined() { return Err(Error::Type("Window is present and is not null".to_string())); } - // Step 11 + // Step 12 if !init.window.handle().is_undefined() { window = Window::NoWindow; } - // Step 12 + // Step 13 let mut request: NetTraitsRequest; request = net_request_from_global(global, temporary_request.current_url()); request.method = temporary_request.method; @@ -159,7 +163,7 @@ impl Request { request.redirect_mode = temporary_request.redirect_mode; request.integrity_metadata = temporary_request.integrity_metadata; - // Step 13 + // Step 14 if init.body.is_some() || init.cache.is_some() || init.credentials.is_some() || @@ -172,31 +176,33 @@ impl Request { init.referrerPolicy.is_some() || !init.window.handle().is_undefined() { - // Step 13.1 + // Step 14.1 if request.mode == NetTraitsRequestMode::Navigate { request.mode = NetTraitsRequestMode::SameOrigin; } - // Step 13.2 + // Step 14.2 TODO: "Unset request's reload-navigation flag." + // Step 14.3 TODO: "Unset request's history-navigation flag." + // Step 14.4 request.referrer = NetTraitsRequestReferrer::Client; - // Step 13.3 + // Step 14.5 request.referrer_policy = None; } - // Step 14 + // Step 15 if let Some(init_referrer) = init.referrer.as_ref() { - // Step 14.1 + // Step 15.1 let ref referrer = init_referrer.0; - // Step 14.2 + // Step 15.2 if referrer.is_empty() { request.referrer = NetTraitsRequestReferrer::NoReferrer; } else { - // Step 14.3 + // Step 15.3.1 let parsed_referrer = base_url.join(referrer); - // Step 14.4 + // Step 15.3.2 if parsed_referrer.is_err() { return Err(Error::Type("Failed to parse referrer url".to_string())); } - // Step 14.5 + // Step 15.3.3 if let Ok(parsed_referrer) = parsed_referrer { if (parsed_referrer.cannot_be_a_base() && parsed_referrer.scheme() == "about" && @@ -205,55 +211,55 @@ impl Request { { request.referrer = NetTraitsRequestReferrer::Client; } else { - // Step 14.6 + // Step 15.3.4 request.referrer = NetTraitsRequestReferrer::ReferrerUrl(parsed_referrer); } } } } - // Step 15 + // Step 16 if let Some(init_referrerpolicy) = init.referrerPolicy.as_ref() { let init_referrer_policy = init_referrerpolicy.clone().into(); request.referrer_policy = Some(init_referrer_policy); } - // Step 16 + // Step 17 let mode = init .mode .as_ref() .map(|m| m.clone().into()) .or(fallback_mode); - // Step 17 + // Step 18 if let Some(NetTraitsRequestMode::Navigate) = mode { return Err(Error::Type("Request mode is Navigate".to_string())); } - // Step 18 + // Step 19 if let Some(m) = mode { request.mode = m; } - // Step 19 + // Step 20 let credentials = init .credentials .as_ref() .map(|m| m.clone().into()) .or(fallback_credentials); - // Step 20 + // Step 21 if let Some(c) = credentials { request.credentials_mode = c; } - // Step 21 + // Step 22 if let Some(init_cache) = init.cache.as_ref() { let cache = init_cache.clone().into(); request.cache_mode = cache; } - // Step 22 + // Step 23 if request.cache_mode == NetTraitsRequestCache::OnlyIfCached { if request.mode != NetTraitsRequestMode::SameOrigin { return Err(Error::Type( @@ -262,45 +268,55 @@ impl Request { } } - // Step 23 + // Step 24 if let Some(init_redirect) = init.redirect.as_ref() { let redirect = init_redirect.clone().into(); request.redirect_mode = redirect; } - // Step 24 + // Step 25 if let Some(init_integrity) = init.integrity.as_ref() { let integrity = init_integrity.clone().to_string(); request.integrity_metadata = integrity; } - // Step 25 + // Step 26 TODO: "If init["keepalive"] exists..." + + // Step 27.1 if let Some(init_method) = init.method.as_ref() { - // Step 25.1 + // Step 27.2 if !is_method(&init_method) { return Err(Error::Type("Method is not a method".to_string())); } if is_forbidden_method(&init_method) { return Err(Error::Type("Method is forbidden".to_string())); } - // Step 25.2 + // Step 27.3 let method = match init_method.as_str() { Some(s) => normalize_method(s) .map_err(|e| Error::Type(format!("Method is not valid: {:?}", e)))?, None => return Err(Error::Type("Method is not a valid UTF8".to_string())), }; - // Step 25.3 + // Step 27.4 request.method = method; } - // Step 26 + // Step 28 TODO: "If init["signal"] exists..." + + // Step 29 let r = Request::from_net_request(global, request); + + // Step 30 TODO: "If signal is not null..." + + // Step 31 + // "or_init" looks unclear here r.headers.or_init(|| Headers::for_request(&r.global())); - // Step 27 + // Step 32 - but spec says this should only be when non-empty init? + // Step 32.1 let mut headers_copy = r.Headers(); - // Step 28 + // Step 32.2 if let Some(possible_header) = init.headers.as_ref() { match possible_header { &HeadersInit::Headers(ref init_headers) => { @@ -319,7 +335,7 @@ impl Request { } } - // Step 29 + // Step 32.3 // We cannot empty `r.Headers().header_list` because // we would undo the Step 27 above. One alternative is to set // `headers_copy` as a deep copy of `r.Headers()`. However, @@ -328,21 +344,21 @@ impl Request { // mutable reference, we cannot mutate `r.Headers()` to be the // deep copied headers in Step 27. - // Step 30 + // Step 32.4 if r.request.borrow().mode == NetTraitsRequestMode::NoCors { let borrowed_request = r.request.borrow(); - // Step 30.1 + // Step 32.4.1 if !is_cors_safelisted_method(&borrowed_request.method) { return Err(Error::Type( "The mode is 'no-cors' but the method is not a cors-safelisted method" .to_string(), )); } - // Step 30.2 + // Step 32.4.2 r.Headers().set_guard(Guard::RequestNoCors); } - // Step 31 + // Step 32.5 match init.headers { None => { // This is equivalent to the specification's concept of @@ -360,10 +376,11 @@ impl Request { _ => {}, } + // Step 32.5-6 depending on how we got here // Copy the headers list onto the headers of net_traits::Request r.request.borrow_mut().headers = r.Headers().get_headers_list(); - // Step 32 + // Step 33 let mut input_body = if let RequestInfo::Request(ref input_request) = input { let input_request_request = input_request.request.borrow(); input_request_request.body.clone() @@ -371,7 +388,7 @@ impl Request { None }; - // Step 33 + // Step 34 if let Some(init_body_option) = init.body.as_ref() { if init_body_option.is_some() || input_body.is_some() { let req = r.request.borrow(); @@ -392,14 +409,16 @@ impl Request { } } - // Step 34 + // Step 35-36 if let Some(Some(ref init_body)) = init.body { - // Step 34.2 + // Step 36.2 TODO "If init["keepalive"] exists and is true..." + + // Step 36.3 let extracted_body_tmp = init_body.extract(); input_body = Some(extracted_body_tmp.0); let content_type = extracted_body_tmp.1; - // Step 34.3 + // Step 36.4 if let Some(contents) = content_type { if !r .Headers() @@ -414,17 +433,23 @@ impl Request { } } - // Step 35 + // Step 37 "TODO if body is non-null and body's source is null..." + // This looks like where we need to set the use-preflight flag + // if the request has a body and nothing else has set the flag. + + // Step 38 is done earlier + + // Step 39 + // TODO: `ReadableStream` object is not implemented in Servo yet. + + // Step 40 r.request.borrow_mut().body = input_body; - // Step 36 + // Step 41 let extracted_mime_type = r.Headers().extract_mime_type(); *r.mime_type.borrow_mut() = extracted_mime_type; - // Step 37 - // TODO: `ReadableStream` object is not implemented in Servo yet. - - // Step 38 + // Step 42 Ok(r) } -- cgit v1.2.3 From b9c4b64978dcd1b4e767f8ca6ed07a06902c4c5b Mon Sep 17 00:00:00 2001 From: Patrick Shaughnessy Date: Sat, 21 Dec 2019 19:37:38 -0500 Subject: Autocomputed content-type header now reaches net request --- components/script/dom/request.rs | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 03e5dee683d..29fd8a15c18 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -25,6 +25,7 @@ use crate::dom::headers::{Guard, Headers}; use crate::dom::promise::Promise; use crate::dom::xmlhttprequest::Extractable; use dom_struct::dom_struct; +use http::header::{HeaderName, HeaderValue}; use http::method::InvalidMethod; use http::Method as HttpMethod; use net_traits::request::CacheMode as NetTraitsRequestCache; @@ -309,7 +310,8 @@ impl Request { // Step 30 TODO: "If signal is not null..." // Step 31 - // "or_init" looks unclear here + // "or_init" looks unclear here, but it always enters the block since r + // hasn't had any other way to initialize its headers r.headers.or_init(|| Headers::for_request(&r.global())); // Step 32 - but spec says this should only be when non-empty init? @@ -420,15 +422,27 @@ impl Request { // Step 36.4 if let Some(contents) = content_type { + let ct_header_name = b"Content-Type"; if !r .Headers() - .Has(ByteString::new(b"Content-Type".to_vec())) + .Has(ByteString::new(ct_header_name.to_vec())) .unwrap() { + let ct_header_val = contents.as_bytes(); r.Headers().Append( - ByteString::new(b"Content-Type".to_vec()), - ByteString::new(contents.as_bytes().to_vec()), + ByteString::new(ct_header_name.to_vec()), + ByteString::new(ct_header_val.to_vec()), )?; + + // In Servo r.Headers's header list isn't a pointer to + // the same actual list as r.request's, and so we need to + // append to both lists to keep them in sync. + if let Ok(v) = HeaderValue::from_bytes(ct_header_val) { + r.request + .borrow_mut() + .headers + .insert(HeaderName::from_bytes(ct_header_name).unwrap(), v); + } } } } -- cgit v1.2.3 From 02c1612cb0dd5a74deb33c9c31d89ded2b50d0a9 Mon Sep 17 00:00:00 2001 From: Kunal Mohan Date: Tue, 7 Jan 2020 13:27:19 +0530 Subject: Add accountable-refcell as optional build time feature --- components/script/dom/request.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 29fd8a15c18..dcd206e3eaf 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -3,7 +3,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use crate::body::{consume_body, BodyOperations, BodyType}; -use crate::dom::bindings::cell::DomRefCell; +use crate::dom::bindings::cell::{DomRefCell, Ref}; use crate::dom::bindings::codegen::Bindings::HeadersBinding::{HeadersInit, HeadersMethods}; use crate::dom::bindings::codegen::Bindings::RequestBinding; use crate::dom::bindings::codegen::Bindings::RequestBinding::ReferrerPolicy; @@ -38,7 +38,7 @@ use net_traits::request::RequestMode as NetTraitsRequestMode; use net_traits::request::{Origin, Window}; use net_traits::ReferrerPolicy as MsgReferrerPolicy; use servo_url::ServoUrl; -use std::cell::{Cell, Ref}; +use std::cell::Cell; use std::rc::Rc; use std::str::FromStr; -- cgit v1.2.3 From f7db4b7f8011239f01c3ba2e5e402c866fbe68fb Mon Sep 17 00:00:00 2001 From: Kunal Mohan Date: Sat, 18 Jan 2020 01:29:26 +0530 Subject: Modify `script` to prevent further violations of snake_case --- components/script/dom/request.rs | 1 + 1 file changed, 1 insertion(+) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index dcd206e3eaf..d75c452c7b9 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -74,6 +74,7 @@ impl Request { } // https://fetch.spec.whatwg.org/#dom-request + #[allow(non_snake_case)] pub fn Constructor( global: &GlobalScope, input: RequestInfo, -- cgit v1.2.3 From 6b0b90767e461ee133146798a3a6b2fce45e3e68 Mon Sep 17 00:00:00 2001 From: Tipowol Date: Fri, 20 Mar 2020 21:15:52 +0100 Subject: Add missing same-origin referrer policy --- components/script/dom/request.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index d75c452c7b9..55e26ba1e67 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -848,6 +848,7 @@ impl Into for ReferrerPolicy { ReferrerPolicy::Origin => MsgReferrerPolicy::Origin, ReferrerPolicy::Origin_when_cross_origin => MsgReferrerPolicy::OriginWhenCrossOrigin, ReferrerPolicy::Unsafe_url => MsgReferrerPolicy::UnsafeUrl, + ReferrerPolicy::Same_origin => MsgReferrerPolicy::SameOrigin, ReferrerPolicy::Strict_origin => MsgReferrerPolicy::StrictOrigin, ReferrerPolicy::Strict_origin_when_cross_origin => { MsgReferrerPolicy::StrictOriginWhenCrossOrigin @@ -864,9 +865,9 @@ impl Into for MsgReferrerPolicy { ReferrerPolicy::No_referrer_when_downgrade }, MsgReferrerPolicy::Origin => ReferrerPolicy::Origin, - MsgReferrerPolicy::SameOrigin => ReferrerPolicy::Origin, MsgReferrerPolicy::OriginWhenCrossOrigin => ReferrerPolicy::Origin_when_cross_origin, MsgReferrerPolicy::UnsafeUrl => ReferrerPolicy::Unsafe_url, + MsgReferrerPolicy::SameOrigin => ReferrerPolicy::Same_origin, MsgReferrerPolicy::StrictOrigin => ReferrerPolicy::Strict_origin, MsgReferrerPolicy::StrictOriginWhenCrossOrigin => { ReferrerPolicy::Strict_origin_when_cross_origin -- cgit v1.2.3 From 3ea6d87bcc37167464e856949a4b9b77d0e9318a Mon Sep 17 00:00:00 2001 From: YUAN LYU Date: Fri, 20 Mar 2020 22:14:18 -0400 Subject: Add trait DomObjectWrap to provide WRAP function --- components/script/dom/request.rs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 55e26ba1e67..6dbe810b81a 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -5,7 +5,6 @@ use crate::body::{consume_body, BodyOperations, BodyType}; use crate::dom::bindings::cell::{DomRefCell, Ref}; use crate::dom::bindings::codegen::Bindings::HeadersBinding::{HeadersInit, HeadersMethods}; -use crate::dom::bindings::codegen::Bindings::RequestBinding; use crate::dom::bindings::codegen::Bindings::RequestBinding::ReferrerPolicy; use crate::dom::bindings::codegen::Bindings::RequestBinding::RequestCache; use crate::dom::bindings::codegen::Bindings::RequestBinding::RequestCredentials; @@ -66,11 +65,7 @@ impl Request { } pub fn new(global: &GlobalScope, url: ServoUrl) -> DomRoot { - reflect_dom_object( - Box::new(Request::new_inherited(global, url)), - global, - RequestBinding::Wrap, - ) + reflect_dom_object(Box::new(Request::new_inherited(global, url)), global) } // https://fetch.spec.whatwg.org/#dom-request -- cgit v1.2.3 From a7c5c976161320dc5d3983cbd8d70229c633afd5 Mon Sep 17 00:00:00 2001 From: Alexandrov Sergey Date: Sat, 16 May 2020 22:46:50 +0300 Subject: check http_state in determine_request_referrer --- components/script/dom/request.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 6dbe810b81a..7ae8c07663a 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -507,8 +507,9 @@ impl Request { fn net_request_from_global(global: &GlobalScope, url: ServoUrl) -> NetTraitsRequest { let origin = Origin::Origin(global.get_url().origin()); + let https_state = global.get_https_state(); let pipeline_id = global.pipeline_id(); - NetTraitsRequest::new(url, Some(origin), Some(pipeline_id)) + NetTraitsRequest::new(url, Some(origin), Some(pipeline_id), https_state) } // https://fetch.spec.whatwg.org/#concept-method-normalize -- cgit v1.2.3 From c4273d86f2a9c3fce378fcd810971e8cf8cae984 Mon Sep 17 00:00:00 2001 From: Bastien Orivel Date: Wed, 6 May 2020 02:20:41 +0200 Subject: Fix the webidl for Headers Make the HeadersInit type match the spec. Fixes #26441 --- components/script/dom/request.rs | 43 ++++++++++++---------------------------- 1 file changed, 13 insertions(+), 30 deletions(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 7ae8c07663a..387b7174791 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -311,27 +311,17 @@ impl Request { r.headers.or_init(|| Headers::for_request(&r.global())); // Step 32 - but spec says this should only be when non-empty init? - // Step 32.1 - let mut headers_copy = r.Headers(); - - // Step 32.2 - if let Some(possible_header) = init.headers.as_ref() { - match possible_header { - &HeadersInit::Headers(ref init_headers) => { - headers_copy = DomRoot::from_ref(&*init_headers); - }, - &HeadersInit::ByteStringSequenceSequence(ref init_sequence) => { - headers_copy.fill(Some(HeadersInit::ByteStringSequenceSequence( - init_sequence.clone(), - )))?; + let headers_copy = init + .headers + .as_ref() + .map(|possible_header| match possible_header { + HeadersInit::ByteStringSequenceSequence(init_sequence) => { + HeadersInit::ByteStringSequenceSequence(init_sequence.clone()) }, - &HeadersInit::ByteStringByteStringRecord(ref init_map) => { - headers_copy.fill(Some(HeadersInit::ByteStringByteStringRecord( - init_map.clone(), - )))?; + HeadersInit::ByteStringByteStringRecord(init_map) => { + HeadersInit::ByteStringByteStringRecord(init_map.clone()) }, - } - } + }); // Step 32.3 // We cannot empty `r.Headers().header_list` because @@ -357,21 +347,17 @@ impl Request { } // Step 32.5 - match init.headers { + match headers_copy { None => { // This is equivalent to the specification's concept of // "associated headers list". If an init headers is not given, // but an input with headers is given, set request's // headers as the input's Headers. if let RequestInfo::Request(ref input_request) = input { - r.Headers() - .fill(Some(HeadersInit::Headers(input_request.Headers())))?; + r.Headers().copy_from_headers(input_request.Headers())?; } }, - Some(HeadersInit::Headers(_)) => { - r.Headers().fill(Some(HeadersInit::Headers(headers_copy)))? - }, - _ => {}, + Some(headers_copy) => r.Headers().fill(Some(headers_copy))?, } // Step 32.5-6 depending on how we got here @@ -493,9 +479,7 @@ impl Request { *r_clone.request.borrow_mut() = req.clone(); r_clone.body_used.set(body_used); *r_clone.mime_type.borrow_mut() = mime_type; - r_clone - .Headers() - .fill(Some(HeadersInit::Headers(r.Headers())))?; + r_clone.Headers().copy_from_headers(r.Headers())?; r_clone.Headers().set_guard(headers_guard); Ok(r_clone) } @@ -895,7 +879,6 @@ impl Into for NetTraitsRequestRedirect { impl Clone for HeadersInit { fn clone(&self) -> HeadersInit { match self { - &HeadersInit::Headers(ref h) => HeadersInit::Headers(h.clone()), &HeadersInit::ByteStringSequenceSequence(ref b) => { HeadersInit::ByteStringSequenceSequence(b.clone()) }, -- cgit v1.2.3 From bd5796c90b8e8e066a32e7da9cfa5251d1559046 Mon Sep 17 00:00:00 2001 From: Gregory Terzian Date: Sat, 29 Feb 2020 11:59:10 +0800 Subject: integrate readablestream with fetch and blob --- components/script/dom/request.rs | 90 ++++++++++++++++++---------------------- 1 file changed, 41 insertions(+), 49 deletions(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 387b7174791..89d9d54506a 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -2,8 +2,9 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -use crate::body::{consume_body, BodyOperations, BodyType}; -use crate::dom::bindings::cell::{DomRefCell, Ref}; +use crate::body::Extractable; +use crate::body::{consume_body, BodyMixin, BodyType}; +use crate::dom::bindings::cell::DomRefCell; use crate::dom::bindings::codegen::Bindings::HeadersBinding::{HeadersInit, HeadersMethods}; use crate::dom::bindings::codegen::Bindings::RequestBinding::ReferrerPolicy; use crate::dom::bindings::codegen::Bindings::RequestBinding::RequestCache; @@ -22,11 +23,13 @@ use crate::dom::bindings::trace::RootedTraceableBox; use crate::dom::globalscope::GlobalScope; use crate::dom::headers::{Guard, Headers}; use crate::dom::promise::Promise; -use crate::dom::xmlhttprequest::Extractable; +use crate::dom::readablestream::ReadableStream; +use crate::script_runtime::JSContext as SafeJSContext; use dom_struct::dom_struct; use http::header::{HeaderName, HeaderValue}; use http::method::InvalidMethod; use http::Method as HttpMethod; +use js::jsapi::JSObject; use net_traits::request::CacheMode as NetTraitsRequestCache; use net_traits::request::CredentialsMode as NetTraitsRequestCredentials; use net_traits::request::Destination as NetTraitsRequestDestination; @@ -37,7 +40,7 @@ use net_traits::request::RequestMode as NetTraitsRequestMode; use net_traits::request::{Origin, Window}; use net_traits::ReferrerPolicy as MsgReferrerPolicy; use servo_url::ServoUrl; -use std::cell::Cell; +use std::ptr::NonNull; use std::rc::Rc; use std::str::FromStr; @@ -45,11 +48,9 @@ use std::str::FromStr; pub struct Request { reflector_: Reflector, request: DomRefCell, - body_used: Cell, + body_stream: MutNullableDom, headers: MutNullableDom, mime_type: DomRefCell>, - #[ignore_malloc_size_of = "Rc"] - body_promise: DomRefCell, BodyType)>>, } impl Request { @@ -57,10 +58,9 @@ impl Request { Request { reflector_: Reflector::new(), request: DomRefCell::new(net_request_from_global(global, url)), - body_used: Cell::new(false), + body_stream: MutNullableDom::new(None), headers: Default::default(), mime_type: DomRefCell::new("".to_string().into_bytes()), - body_promise: DomRefCell::new(None), } } @@ -72,7 +72,7 @@ impl Request { #[allow(non_snake_case)] pub fn Constructor( global: &GlobalScope, - input: RequestInfo, + mut input: RequestInfo, init: RootedTraceableBox, ) -> Fallible> { // Step 1 @@ -365,9 +365,9 @@ impl Request { r.request.borrow_mut().headers = r.Headers().get_headers_list(); // Step 33 - let mut input_body = if let RequestInfo::Request(ref input_request) = input { - let input_request_request = input_request.request.borrow(); - input_request_request.body.clone() + let mut input_body = if let RequestInfo::Request(ref mut input_request) = input { + let mut input_request_request = input_request.request.borrow_mut(); + input_request_request.body.take() } else { None }; @@ -398,12 +398,10 @@ impl Request { // Step 36.2 TODO "If init["keepalive"] exists and is true..." // Step 36.3 - let extracted_body_tmp = init_body.extract(); - input_body = Some(extracted_body_tmp.0); - let content_type = extracted_body_tmp.1; + let mut extracted_body = init_body.extract(global)?; // Step 36.4 - if let Some(contents) = content_type { + if let Some(contents) = extracted_body.content_type.take() { let ct_header_name = b"Content-Type"; if !r .Headers() @@ -427,6 +425,10 @@ impl Request { } } } + + let (net_body, stream) = extracted_body.into_net_request_body(); + r.body_stream.set(Some(&*stream)); + input_body = Some(net_body); } // Step 37 "TODO if body is non-null and body's source is null..." @@ -448,13 +450,6 @@ impl Request { // Step 42 Ok(r) } - - // https://fetch.spec.whatwg.org/#concept-body-locked - fn locked(&self) -> bool { - // TODO: ReadableStream is unimplemented. Just return false - // for now. - false - } } impl Request { @@ -467,7 +462,6 @@ impl Request { fn clone_from(r: &Request) -> Fallible> { let req = r.request.borrow(); let url = req.url(); - let body_used = r.body_used.get(); let mime_type = r.mime_type.borrow().clone(); let headers_guard = r.Headers().get_guard(); let r_clone = Request::new(&r.global(), url); @@ -477,7 +471,6 @@ impl Request { borrowed_r_request.origin = req.origin.clone(); } *r_clone.request.borrow_mut() = req.clone(); - r_clone.body_used.set(body_used); *r_clone.mime_type.borrow_mut() = mime_type; r_clone.Headers().copy_from_headers(r.Headers())?; r_clone.Headers().set_guard(headers_guard); @@ -536,16 +529,14 @@ fn includes_credentials(input: &ServoUrl) -> bool { !input.username().is_empty() || input.password().is_some() } -// TODO: `Readable Stream` object is not implemented in Servo yet. // https://fetch.spec.whatwg.org/#concept-body-disturbed -fn request_is_disturbed(_input: &Request) -> bool { - false +fn request_is_disturbed(input: &Request) -> bool { + input.is_disturbed() } -// TODO: `Readable Stream` object is not implemented in Servo yet. // https://fetch.spec.whatwg.org/#concept-body-locked -fn request_is_locked(_input: &Request) -> bool { - false +fn request_is_locked(input: &Request) -> bool { + input.is_locked() } impl RequestMethods for Request { @@ -622,9 +613,14 @@ impl RequestMethods for Request { DOMString::from_string(r.integrity_metadata.clone()) } + /// + fn GetBody(&self, _cx: SafeJSContext) -> Option> { + self.body().map(|stream| stream.get_js_stream()) + } + // https://fetch.spec.whatwg.org/#dom-body-bodyused fn BodyUsed(&self) -> bool { - self.body_used.get() + self.is_disturbed() } // https://fetch.spec.whatwg.org/#dom-request-clone @@ -667,29 +663,25 @@ impl RequestMethods for Request { } } -impl BodyOperations for Request { - fn get_body_used(&self) -> bool { - self.BodyUsed() - } - - fn set_body_promise(&self, p: &Rc, body_type: BodyType) { - assert!(self.body_promise.borrow().is_none()); - self.body_used.set(true); - *self.body_promise.borrow_mut() = Some((p.clone(), body_type)); +impl BodyMixin for Request { + fn is_disturbed(&self) -> bool { + let body_stream = self.body_stream.get(); + body_stream + .as_ref() + .map_or(false, |stream| stream.is_disturbed()) } fn is_locked(&self) -> bool { - self.locked() + let body_stream = self.body_stream.get(); + body_stream.map_or(false, |stream| stream.is_locked()) } - fn take_body(&self) -> Option> { - let mut request = self.request.borrow_mut(); - let body = request.body.take(); - Some(body.unwrap_or(vec![])) + fn body(&self) -> Option> { + self.body_stream.get() } - fn get_mime_type(&self) -> Ref> { - self.mime_type.borrow() + fn get_mime_type(&self) -> Vec { + self.mime_type.borrow().clone() } } -- cgit v1.2.3 From fa18cf620f1c271bee8808026ab40ffbaa11aee6 Mon Sep 17 00:00:00 2001 From: Matthias Deiml Date: Mon, 15 Jun 2020 18:44:59 +0200 Subject: Make url for "client" referrer mandatory --- components/script/dom/request.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 89d9d54506a..27d2a1e61bc 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -180,7 +180,7 @@ impl Request { // Step 14.2 TODO: "Unset request's reload-navigation flag." // Step 14.3 TODO: "Unset request's history-navigation flag." // Step 14.4 - request.referrer = NetTraitsRequestReferrer::Client; + request.referrer = global.get_referrer(); // Step 14.5 request.referrer_policy = None; } @@ -206,7 +206,7 @@ impl Request { parsed_referrer.path() == "client") || parsed_referrer.origin() != origin { - request.referrer = NetTraitsRequestReferrer::Client; + request.referrer = global.get_referrer(); } else { // Step 15.3.4 request.referrer = NetTraitsRequestReferrer::ReferrerUrl(parsed_referrer); @@ -486,7 +486,8 @@ fn net_request_from_global(global: &GlobalScope, url: ServoUrl) -> NetTraitsRequ let origin = Origin::Origin(global.get_url().origin()); let https_state = global.get_https_state(); let pipeline_id = global.pipeline_id(); - NetTraitsRequest::new(url, Some(origin), Some(pipeline_id), https_state) + let referrer = NetTraitsRequestReferrer::ReferrerUrl(global.get_url()); + NetTraitsRequest::new(url, Some(origin), referrer, Some(pipeline_id), https_state) } // https://fetch.spec.whatwg.org/#concept-method-normalize @@ -567,7 +568,7 @@ impl RequestMethods for Request { let r = self.request.borrow(); USVString(match r.referrer { NetTraitsRequestReferrer::NoReferrer => String::from(""), - NetTraitsRequestReferrer::Client => String::from("about:client"), + NetTraitsRequestReferrer::Client(_) => String::from("about:client"), NetTraitsRequestReferrer::ReferrerUrl(ref u) => { let u_c = u.clone(); u_c.into_string() -- cgit v1.2.3 From 47355766ed72b7b4855f1119a1a42f4b5e5d68ce Mon Sep 17 00:00:00 2001 From: Matthias Deiml Date: Tue, 16 Jun 2020 00:35:46 +0200 Subject: Fix invalid use of ReferrerUrl --- components/script/dom/request.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'components/script/dom/request.rs') diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 27d2a1e61bc..e301d360cc4 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -486,7 +486,7 @@ fn net_request_from_global(global: &GlobalScope, url: ServoUrl) -> NetTraitsRequ let origin = Origin::Origin(global.get_url().origin()); let https_state = global.get_https_state(); let pipeline_id = global.pipeline_id(); - let referrer = NetTraitsRequestReferrer::ReferrerUrl(global.get_url()); + let referrer = global.get_referrer(); NetTraitsRequest::new(url, Some(origin), referrer, Some(pipeline_id), https_state) } -- cgit v1.2.3