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::jsval::UndefinedValue;
|
||||||
use js::rust::{CustomAutoRooterGuard, HandleObject};
|
use js::rust::{CustomAutoRooterGuard, HandleObject};
|
||||||
use js::typedarray::{ArrayBuffer, ArrayBufferView, CreateWith};
|
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::{
|
use net_traits::{
|
||||||
CoreResourceMsg, FetchChannels, MessageData, WebSocketDomAction, WebSocketNetworkEvent,
|
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)
|
let request = RequestBuilder::new(global.webview_id(), url_record, Referrer::NoReferrer)
|
||||||
.origin(global.origin().immutable().clone())
|
.origin(global.origin().immutable().clone())
|
||||||
.insecure_requests_policy(global.insecure_requests_policy())
|
.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 {
|
let channels = FetchChannels::WebSocket {
|
||||||
event_sender: resource_event_sender,
|
event_sender: resource_event_sender,
|
||||||
|
|
|
@ -434,6 +434,19 @@ impl RequestBuilder {
|
||||||
self
|
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 {
|
pub fn build(self) -> Request {
|
||||||
let mut request = Request::new(
|
let mut request = Request::new(
|
||||||
self.id,
|
self.id,
|
||||||
|
|
24
tests/wpt/meta/MANIFEST.json
vendored
24
tests/wpt/meta/MANIFEST.json
vendored
|
@ -511925,7 +511925,7 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"constants.sub.js": [
|
"constants.sub.js": [
|
||||||
"fd3c3b84b96a0a2537ac65dc4f626c4be03d9077",
|
"78601ce877a4663443f6dbc16408e62d09492a8d",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"cookies": {
|
"cookies": {
|
||||||
|
@ -512104,6 +512104,14 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"opening-handshake": {
|
||||||
|
"resources": {
|
||||||
|
"redirect_response.py": [
|
||||||
|
"d605586040596d0a5c44f3b1055df987427ae50a",
|
||||||
|
[]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
"resources": {
|
"resources": {
|
||||||
"websockets-test-helpers.sub.js": [
|
"websockets-test-helpers.sub.js": [
|
||||||
"2680670cc691b14c25721d2dd474a2a4c15bac3f",
|
"2680670cc691b14c25721d2dd474a2a4c15bac3f",
|
||||||
|
@ -878398,6 +878406,13 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"cross-origin-cookie-set.html": [
|
||||||
|
"f5ccbd1a3341ffd3928f08a85b320951ad6da616",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"third-party-cookie-accepted.https.html": [
|
"third-party-cookie-accepted.https.html": [
|
||||||
"208d297016fffca84a22d8b8b06b3c6dc64f088d",
|
"208d297016fffca84a22d8b8b06b3c6dc64f088d",
|
||||||
[
|
[
|
||||||
|
@ -879845,6 +879860,13 @@
|
||||||
"timeout": "long"
|
"timeout": "long"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
],
|
||||||
|
"received-301-code.html": [
|
||||||
|
"41ca295d833fb77c40dbafa45dead5e638cbbfdd",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{}
|
||||||
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"referrer.any.js": [
|
"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_DOMAIN_PORT = __SCHEME + '://' + __SERVER__NAME + ':' + __PORT;
|
||||||
|
const SCHEME_CROSSDOMAIN_PORT = __SCHEME + '://' + '{{hosts[alt][www]}}' + ':' + __PORT;
|
||||||
|
|
||||||
function url_has_variant(variant) {
|
function url_has_variant(variant) {
|
||||||
const params = new URLSearchParams(location.search);
|
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