mirror of
https://github.com/servo/servo.git
synced 2025-08-03 20:50:07 +01:00
Auto merge of #26983 - jdm:websocket-panic, r=nox
Silently ignore failures to queue websocket tasks - [x] `./mach build -d` does not report any errors - [x] `./mach test-tidy` does not report any errors - [x] These changes fix #26977 - [x] There are tests for these changes
This commit is contained in:
commit
1dc41b3277
4 changed files with 41 additions and 14 deletions
|
@ -68,7 +68,7 @@ mod close_code {
|
|||
pub const TLS_FAILED: u16 = 1015;
|
||||
}
|
||||
|
||||
pub fn close_the_websocket_connection(
|
||||
fn close_the_websocket_connection(
|
||||
address: Trusted<WebSocket>,
|
||||
task_source: &WebsocketTaskSource,
|
||||
canceller: &TaskCanceller,
|
||||
|
@ -81,12 +81,10 @@ pub fn close_the_websocket_connection(
|
|||
code: code,
|
||||
reason: Some(reason),
|
||||
};
|
||||
task_source
|
||||
.queue_with_canceller(close_task, &canceller)
|
||||
.unwrap();
|
||||
let _ = task_source.queue_with_canceller(close_task, &canceller);
|
||||
}
|
||||
|
||||
pub fn fail_the_websocket_connection(
|
||||
fn fail_the_websocket_connection(
|
||||
address: Trusted<WebSocket>,
|
||||
task_source: &WebsocketTaskSource,
|
||||
canceller: &TaskCanceller,
|
||||
|
@ -97,9 +95,7 @@ pub fn fail_the_websocket_connection(
|
|||
code: Some(close_code::ABNORMAL),
|
||||
reason: None,
|
||||
};
|
||||
task_source
|
||||
.queue_with_canceller(close_task, &canceller)
|
||||
.unwrap();
|
||||
let _ = task_source.queue_with_canceller(close_task, &canceller);
|
||||
}
|
||||
|
||||
#[dom_struct]
|
||||
|
@ -220,18 +216,14 @@ impl WebSocket {
|
|||
address: address.clone(),
|
||||
protocol_in_use,
|
||||
};
|
||||
task_source
|
||||
.queue_with_canceller(open_thread, &canceller)
|
||||
.unwrap();
|
||||
let _ = task_source.queue_with_canceller(open_thread, &canceller);
|
||||
},
|
||||
WebSocketNetworkEvent::MessageReceived(message) => {
|
||||
let message_thread = MessageReceivedTask {
|
||||
address: address.clone(),
|
||||
message: message,
|
||||
};
|
||||
task_source
|
||||
.queue_with_canceller(message_thread, &canceller)
|
||||
.unwrap();
|
||||
let _ = task_source.queue_with_canceller(message_thread, &canceller);
|
||||
},
|
||||
WebSocketNetworkEvent::Fail => {
|
||||
fail_the_websocket_connection(address.clone(), &task_source, &canceller);
|
||||
|
|
|
@ -11248,6 +11248,10 @@
|
|||
[]
|
||||
]
|
||||
},
|
||||
"websocket_disconnect_worker.js": [
|
||||
"b8b61957913572b0b121b0aa77c2ec247235fcaa",
|
||||
[]
|
||||
],
|
||||
"worker_member_test.js": [
|
||||
"abca5cd280ac07914cb21ee4968ac4d27e7feb68",
|
||||
[]
|
||||
|
@ -14598,6 +14602,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"websocket_disconnect.html": [
|
||||
"797342743a4bc69d6c8748d0f2dd6841566e6ca5",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"window-postmessage-sameorigin.html": [
|
||||
"cb3bc26e8821b73bcee0455c765362ab731bf3fa",
|
||||
[
|
||||
|
|
14
tests/wpt/mozilla/tests/mozilla/websocket_disconnect.html
Normal file
14
tests/wpt/mozilla/tests/mozilla/websocket_disconnect.html
Normal file
|
@ -0,0 +1,14 @@
|
|||
<html>
|
||||
<head>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/common/get-host-info.sub.js"></script>
|
||||
<script>
|
||||
async_test((t) => {
|
||||
let w = new Worker('websocket_disconnect_worker.js');
|
||||
w.onmessage = () => {
|
||||
w.terminate();
|
||||
t.step_timeout(t.step_func_done(), 0);
|
||||
};
|
||||
}, "Web socket doesn't panic when worker disappears");
|
||||
</script>
|
|
@ -0,0 +1,10 @@
|
|||
// Create a websocket and queue up a bunch of activity, then signal the parent to
|
||||
// terminate this worker before the queued activity is complete.
|
||||
importScripts('/websockets/websocket.sub.js');
|
||||
var w = CreateWebSocket(false, true, false);
|
||||
w.onopen = () => {
|
||||
postMessage("close");
|
||||
for (var i = 0; i < 1000; i++) {
|
||||
w.send('hello' + i);
|
||||
}
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue