From ec665d9dcee6061b0253b2b38dccda06400cdce1 Mon Sep 17 00:00:00 2001 From: Bastien Orivel Date: Wed, 6 May 2020 20:08:26 +0200 Subject: [PATCH] Properly set the url on the Response object when the response is an opaqueredirect --- components/net/image_cache.rs | 2 +- components/net_traits/lib.rs | 2 +- components/net_traits/response.rs | 2 +- components/script/dom/eventsource.rs | 2 +- components/script/dom/xmlhttprequest.rs | 2 +- components/script/fetch.rs | 8 +- components/script/stylesheet_loader.rs | 2 +- .../api/redirect/redirect-mode.any.js.ini | 90 ------------------- 8 files changed, 10 insertions(+), 100 deletions(-) diff --git a/components/net/image_cache.rs b/components/net/image_cache.rs index 95379770883d..d32061da06ab 100644 --- a/components/net/image_cache.rs +++ b/components/net/image_cache.rs @@ -592,7 +592,7 @@ impl ImageCache for ImageCacheImpl { FilteredMetadata::Basic(_) | FilteredMetadata::Cors(_) => { CorsStatus::Safe }, - FilteredMetadata::Opaque | FilteredMetadata::OpaqueRedirect => { + FilteredMetadata::Opaque | FilteredMetadata::OpaqueRedirect(_) => { CorsStatus::Unsafe }, }, diff --git a/components/net_traits/lib.rs b/components/net_traits/lib.rs index a7100e0ef448..7d0badb20b80 100644 --- a/components/net_traits/lib.rs +++ b/components/net_traits/lib.rs @@ -186,7 +186,7 @@ pub enum FilteredMetadata { Basic(Metadata), Cors(Metadata), Opaque, - OpaqueRedirect, + OpaqueRedirect(ServoUrl), } #[derive(Clone, Debug, Deserialize, Serialize)] diff --git a/components/net_traits/response.rs b/components/net_traits/response.rs index f509801678fe..b2342a332b4c 100644 --- a/components/net_traits/response.rs +++ b/components/net_traits/response.rs @@ -341,7 +341,7 @@ impl Response { unsafe_: unsafe_metadata, }), ResponseType::OpaqueRedirect => Ok(FetchMetadata::Filtered { - filtered: FilteredMetadata::OpaqueRedirect, + filtered: FilteredMetadata::OpaqueRedirect(url.clone()), unsafe_: unsafe_metadata, }), } diff --git a/components/script/dom/eventsource.rs b/components/script/dom/eventsource.rs index 101eb851cfbd..4ab9d11f906d 100644 --- a/components/script/dom/eventsource.rs +++ b/components/script/dom/eventsource.rs @@ -340,7 +340,7 @@ impl FetchResponseListener for EventSourceContext { let meta = match fm { FetchMetadata::Unfiltered(m) => m, FetchMetadata::Filtered { unsafe_, filtered } => match filtered { - FilteredMetadata::Opaque | FilteredMetadata::OpaqueRedirect => { + FilteredMetadata::Opaque | FilteredMetadata::OpaqueRedirect(_) => { return self.fail_the_connection() }, _ => unsafe_, diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs index 5ab370feca86..336d7a89f227 100644 --- a/components/script/dom/xmlhttprequest.rs +++ b/components/script/dom/xmlhttprequest.rs @@ -984,7 +984,7 @@ impl XMLHttpRequest { FilteredMetadata::Basic(m) => m, FilteredMetadata::Cors(m) => m, FilteredMetadata::Opaque => return Err(Error::Network), - FilteredMetadata::OpaqueRedirect => return Err(Error::Network), + FilteredMetadata::OpaqueRedirect(_) => return Err(Error::Network), }, }, Err(_) => { diff --git a/components/script/fetch.rs b/components/script/fetch.rs index fe0792d857fc..a1ba638a8d5e 100644 --- a/components/script/fetch.rs +++ b/components/script/fetch.rs @@ -246,10 +246,10 @@ impl FetchResponseListener for FetchContext { .root() .set_type(DOMResponseType::Opaque); }, - FilteredMetadata::OpaqueRedirect => { - self.response_object - .root() - .set_type(DOMResponseType::Opaqueredirect); + FilteredMetadata::OpaqueRedirect(url) => { + let r = self.response_object.root(); + r.set_type(DOMResponseType::Opaqueredirect); + r.set_final_url(url); }, }, }, diff --git a/components/script/stylesheet_loader.rs b/components/script/stylesheet_loader.rs index 8e3f3624fb18..b0c52d5fc8cb 100644 --- a/components/script/stylesheet_loader.rs +++ b/components/script/stylesheet_loader.rs @@ -101,7 +101,7 @@ impl FetchResponseListener for StylesheetContext { fn process_response(&mut self, metadata: Result) { if let Ok(FetchMetadata::Filtered { ref filtered, .. }) = metadata { match *filtered { - FilteredMetadata::Opaque | FilteredMetadata::OpaqueRedirect => { + FilteredMetadata::Opaque | FilteredMetadata::OpaqueRedirect(_) => { self.origin_clean = false; }, _ => {}, diff --git a/tests/wpt/metadata/fetch/api/redirect/redirect-mode.any.js.ini b/tests/wpt/metadata/fetch/api/redirect/redirect-mode.any.js.ini index b6eadc3b5cd6..0d553db37374 100644 --- a/tests/wpt/metadata/fetch/api/redirect/redirect-mode.any.js.ini +++ b/tests/wpt/metadata/fetch/api/redirect/redirect-mode.any.js.ini @@ -1,123 +1,33 @@ [redirect-mode.any.worker.html] - [same-origin redirect 301 in manual redirect and cors mode] - expected: FAIL - - [same-origin redirect 301 in manual redirect and no-cors mode] - expected: FAIL - - [same-origin redirect 302 in manual redirect and cors mode] - expected: FAIL - - [same-origin redirect 302 in manual redirect and no-cors mode] - expected: FAIL - - [same-origin redirect 303 in manual redirect and cors mode] - expected: FAIL - - [same-origin redirect 303 in manual redirect and no-cors mode] - expected: FAIL - - [same-origin redirect 307 in manual redirect and cors mode] - expected: FAIL - - [same-origin redirect 307 in manual redirect and no-cors mode] - expected: FAIL - - [same-origin redirect 308 in manual redirect and cors mode] - expected: FAIL - - [same-origin redirect 308 in manual redirect and no-cors mode] - expected: FAIL - - [cross-origin redirect 301 in manual redirect and cors mode] - expected: FAIL - [cross-origin redirect 301 in manual redirect and no-cors mode] expected: FAIL - [cross-origin redirect 302 in manual redirect and cors mode] - expected: FAIL - [cross-origin redirect 302 in manual redirect and no-cors mode] expected: FAIL - [cross-origin redirect 303 in manual redirect and cors mode] - expected: FAIL - [cross-origin redirect 303 in manual redirect and no-cors mode] expected: FAIL - [cross-origin redirect 307 in manual redirect and cors mode] - expected: FAIL - [cross-origin redirect 307 in manual redirect and no-cors mode] expected: FAIL - [cross-origin redirect 308 in manual redirect and cors mode] - expected: FAIL - [cross-origin redirect 308 in manual redirect and no-cors mode] expected: FAIL [redirect-mode.any.html] - [same-origin redirect 301 in manual redirect and cors mode] - expected: FAIL - - [same-origin redirect 301 in manual redirect and no-cors mode] - expected: FAIL - - [same-origin redirect 302 in manual redirect and cors mode] - expected: FAIL - - [same-origin redirect 302 in manual redirect and no-cors mode] - expected: FAIL - - [same-origin redirect 303 in manual redirect and cors mode] - expected: FAIL - - [same-origin redirect 303 in manual redirect and no-cors mode] - expected: FAIL - - [same-origin redirect 307 in manual redirect and cors mode] - expected: FAIL - - [same-origin redirect 307 in manual redirect and no-cors mode] - expected: FAIL - - [same-origin redirect 308 in manual redirect and cors mode] - expected: FAIL - - [same-origin redirect 308 in manual redirect and no-cors mode] - expected: FAIL - - [cross-origin redirect 301 in manual redirect and cors mode] - expected: FAIL - [cross-origin redirect 301 in manual redirect and no-cors mode] expected: FAIL - [cross-origin redirect 302 in manual redirect and cors mode] - expected: FAIL - [cross-origin redirect 302 in manual redirect and no-cors mode] expected: FAIL - [cross-origin redirect 303 in manual redirect and cors mode] - expected: FAIL - [cross-origin redirect 303 in manual redirect and no-cors mode] expected: FAIL - [cross-origin redirect 307 in manual redirect and cors mode] - expected: FAIL - [cross-origin redirect 307 in manual redirect and no-cors mode] expected: FAIL - [cross-origin redirect 308 in manual redirect and cors mode] - expected: FAIL - [cross-origin redirect 308 in manual redirect and no-cors mode] expected: FAIL