From bea7a969f4c960dd14eae9c2c7496b03c4371495 Mon Sep 17 00:00:00 2001 From: Domenico Rizzo Date: Mon, 10 Feb 2025 21:29:05 +0100 Subject: [PATCH] implemented feture and tests (#35309) Signed-off-by: Domenico Rizzo --- components/script/dom/websocket.rs | 11 ++++- components/shared/net/request.rs | 13 ++++++ tests/wpt/meta/MANIFEST.json | 24 ++++++++++- tests/wpt/tests/websockets/constants.sub.js | 1 + .../cookies/cross-origin-cookie-set.html | 40 +++++++++++++++++++ .../opening-handshake/received-301-code.html | 23 +++++++++++ .../resources/redirect_response.py | 3 ++ 7 files changed, 112 insertions(+), 3 deletions(-) create mode 100644 tests/wpt/tests/websockets/cookies/cross-origin-cookie-set.html create mode 100644 tests/wpt/tests/websockets/opening-handshake/received-301-code.html create mode 100644 tests/wpt/tests/websockets/opening-handshake/resources/redirect_response.py diff --git a/components/script/dom/websocket.rs b/components/script/dom/websocket.rs index 86c519f0d54..f00b3ef6aea 100644 --- a/components/script/dom/websocket.rs +++ b/components/script/dom/websocket.rs @@ -13,7 +13,10 @@ use js::jsapi::{JSAutoRealm, JSObject}; use js::jsval::UndefinedValue; use js::rust::{CustomAutoRooterGuard, HandleObject}; use js::typedarray::{ArrayBuffer, ArrayBufferView, CreateWith}; -use net_traits::request::{Referrer, RequestBuilder, RequestMode}; +use net_traits::request::{ + CacheMode, CredentialsMode, RedirectMode, Referrer, RequestBuilder, RequestMode, + ServiceWorkersMode, +}; use net_traits::{ CoreResourceMsg, FetchChannels, MessageData, WebSocketDomAction, WebSocketNetworkEvent, }; @@ -258,7 +261,11 @@ impl WebSocketMethods for WebSocket { let request = RequestBuilder::new(global.webview_id(), url_record, Referrer::NoReferrer) .origin(global.origin().immutable().clone()) .insecure_requests_policy(global.insecure_requests_policy()) - .mode(RequestMode::WebSocket { protocols }); + .mode(RequestMode::WebSocket { protocols }) + .service_workers_mode(ServiceWorkersMode::None) + .credentials_mode(CredentialsMode::Include) + .cache_mode(CacheMode::NoCache) + .redirect_mode(RedirectMode::Error); let channels = FetchChannels::WebSocket { event_sender: resource_event_sender, diff --git a/components/shared/net/request.rs b/components/shared/net/request.rs index 642f2a58bc3..14757bd4e5d 100644 --- a/components/shared/net/request.rs +++ b/components/shared/net/request.rs @@ -434,6 +434,19 @@ impl RequestBuilder { self } + pub fn service_workers_mode( + mut self, + service_workers_mode: ServiceWorkersMode, + ) -> RequestBuilder { + self.service_workers_mode = service_workers_mode; + self + } + + pub fn cache_mode(mut self, cache_mode: CacheMode) -> RequestBuilder { + self.cache_mode = cache_mode; + self + } + pub fn build(self) -> Request { let mut request = Request::new( self.id, diff --git a/tests/wpt/meta/MANIFEST.json b/tests/wpt/meta/MANIFEST.json index ae655b6b0fe..d6749ca9e0e 100644 --- a/tests/wpt/meta/MANIFEST.json +++ b/tests/wpt/meta/MANIFEST.json @@ -511925,7 +511925,7 @@ [] ], "constants.sub.js": [ - "fd3c3b84b96a0a2537ac65dc4f626c4be03d9077", + "78601ce877a4663443f6dbc16408e62d09492a8d", [] ], "cookies": { @@ -512104,6 +512104,14 @@ } } }, + "opening-handshake": { + "resources": { + "redirect_response.py": [ + "d605586040596d0a5c44f3b1055df987427ae50a", + [] + ] + } + }, "resources": { "websockets-test-helpers.sub.js": [ "2680670cc691b14c25721d2dd474a2a4c15bac3f", @@ -878398,6 +878406,13 @@ } ] ], + "cross-origin-cookie-set.html": [ + "f5ccbd1a3341ffd3928f08a85b320951ad6da616", + [ + null, + {} + ] + ], "third-party-cookie-accepted.https.html": [ "208d297016fffca84a22d8b8b06b3c6dc64f088d", [ @@ -879845,6 +879860,13 @@ "timeout": "long" } ] + ], + "received-301-code.html": [ + "41ca295d833fb77c40dbafa45dead5e638cbbfdd", + [ + null, + {} + ] ] }, "referrer.any.js": [ diff --git a/tests/wpt/tests/websockets/constants.sub.js b/tests/wpt/tests/websockets/constants.sub.js index fd3c3b84b96..78601ce877a 100644 --- a/tests/wpt/tests/websockets/constants.sub.js +++ b/tests/wpt/tests/websockets/constants.sub.js @@ -15,6 +15,7 @@ if (url_has_flag('h2')) { } const SCHEME_DOMAIN_PORT = __SCHEME + '://' + __SERVER__NAME + ':' + __PORT; +const SCHEME_CROSSDOMAIN_PORT = __SCHEME + '://' + '{{hosts[alt][www]}}' + ':' + __PORT; function url_has_variant(variant) { const params = new URLSearchParams(location.search); diff --git a/tests/wpt/tests/websockets/cookies/cross-origin-cookie-set.html b/tests/wpt/tests/websockets/cookies/cross-origin-cookie-set.html new file mode 100644 index 00000000000..f5ccbd1a334 --- /dev/null +++ b/tests/wpt/tests/websockets/cookies/cross-origin-cookie-set.html @@ -0,0 +1,40 @@ + +Include credentials in cross-origin websocket requests + + + + + + +

WebSocket - Set Cross-origin cookie

+
+ diff --git a/tests/wpt/tests/websockets/opening-handshake/received-301-code.html b/tests/wpt/tests/websockets/opening-handshake/received-301-code.html new file mode 100644 index 00000000000..41ca295d833 --- /dev/null +++ b/tests/wpt/tests/websockets/opening-handshake/received-301-code.html @@ -0,0 +1,23 @@ + +WebSockets: 301 Code Failed + + + + +
+ diff --git a/tests/wpt/tests/websockets/opening-handshake/resources/redirect_response.py b/tests/wpt/tests/websockets/opening-handshake/resources/redirect_response.py new file mode 100644 index 00000000000..d6055860405 --- /dev/null +++ b/tests/wpt/tests/websockets/opening-handshake/resources/redirect_response.py @@ -0,0 +1,3 @@ +def main(request, response): + headers = [('Location', '/echo')] + return (301, "moved"), headers, ''