mirror of
https://github.com/servo/servo.git
synced 2025-08-05 05:30:08 +01:00
implemented feture and tests (#35309)
Signed-off-by: Domenico Rizzo <domenico.rizzo@gmail.com>
This commit is contained in:
parent
5e0af44edb
commit
bea7a969f4
7 changed files with 112 additions and 3 deletions
|
@ -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<crate::DomTypeHolder> 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,
|
||||
|
|
|
@ -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,
|
||||
|
|
24
tests/wpt/meta/MANIFEST.json
vendored
24
tests/wpt/meta/MANIFEST.json
vendored
|
@ -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": [
|
||||
|
|
1
tests/wpt/tests/websockets/constants.sub.js
vendored
1
tests/wpt/tests/websockets/constants.sub.js
vendored
|
@ -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);
|
||||
|
|
40
tests/wpt/tests/websockets/cookies/cross-origin-cookie-set.html
vendored
Normal file
40
tests/wpt/tests/websockets/cookies/cross-origin-cookie-set.html
vendored
Normal file
|
@ -0,0 +1,40 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Include credentials in cross-origin websocket requests</title>
|
||||
<meta name=author title="Domenico Rizzo" href="mailto:domenico.rizzo@gmail.com">
|
||||
|
||||
<script src=/resources/testharness.js></script>
|
||||
<script src=/resources/testharnessreport.js></script>
|
||||
<script src="/websockets/constants.sub.js"></script>
|
||||
|
||||
<h1>WebSocket - Set Cross-origin cookie</h1>
|
||||
<div id=log></div>
|
||||
<script>
|
||||
var resp_test = async_test('Cookie should be set')
|
||||
|
||||
resp_test.step(function() {
|
||||
var ws = new WebSocket(SCHEME_CROSSDOMAIN_PORT + "/set-cookie?cookie_test");
|
||||
ws.onerror = resp_test.step_func_done(function () {
|
||||
assert_unreached("ws no error");
|
||||
});
|
||||
ws.onclose = resp_test.step_func_done(function () {
|
||||
assert_unreached("'close' should not fire before 'open'.");
|
||||
});
|
||||
ws.onopen = resp_test.step_func(function (e) {
|
||||
ws.onclose = null;
|
||||
ws.close();
|
||||
|
||||
var ws2 = new WebSocket(SCHEME_CROSSDOMAIN_PORT + "/echo-cookie");
|
||||
ws2.onerror = resp_test.step_func_done(function () {
|
||||
assert_unreached("ws2 no error");
|
||||
});
|
||||
ws2.onclose = resp_test.step_func_done(function () {
|
||||
assert_unreached("'close' should not fire before 'open'.");
|
||||
});
|
||||
ws2.onmessage = resp_test.step_func_done(function (e) {
|
||||
ws2.onclose = null;
|
||||
ws2.close();
|
||||
assert_true(/ws_test_cookie_test=test/.test(e.data));
|
||||
});
|
||||
});
|
||||
})
|
||||
</script>
|
23
tests/wpt/tests/websockets/opening-handshake/received-301-code.html
vendored
Normal file
23
tests/wpt/tests/websockets/opening-handshake/received-301-code.html
vendored
Normal file
|
@ -0,0 +1,23 @@
|
|||
<!doctype html>
|
||||
<title>WebSockets: 301 Code Failed</title>
|
||||
<meta name=author title="Domenico Rizzo" href="mailto:domenico.rizzo@gmail.com">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="../constants.sub.js"></script>
|
||||
<div id="log"></div>
|
||||
<script>
|
||||
async_test(function(t) {
|
||||
t.step(function() {
|
||||
const ws = new WebSocket(new URL("resources/redirect_response.py", location.href));
|
||||
|
||||
ws.onopen = t.step_func(function() {
|
||||
assert_unreached("onopen");
|
||||
});
|
||||
|
||||
ws.onerror = t.step_func(function() {
|
||||
assert_true(true)
|
||||
t.done()
|
||||
});
|
||||
});
|
||||
}, 'Websockets - Received 301 code');
|
||||
</script>
|
3
tests/wpt/tests/websockets/opening-handshake/resources/redirect_response.py
vendored
Normal file
3
tests/wpt/tests/websockets/opening-handshake/resources/redirect_response.py
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
def main(request, response):
|
||||
headers = [('Location', '/echo')]
|
||||
return (301, "moved"), headers, ''
|
Loading…
Add table
Add a link
Reference in a new issue