mirror of
https://github.com/servo/servo.git
synced 2025-08-05 05:30:08 +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 const TLS_FAILED: u16 = 1015;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn close_the_websocket_connection(
|
fn close_the_websocket_connection(
|
||||||
address: Trusted<WebSocket>,
|
address: Trusted<WebSocket>,
|
||||||
task_source: &WebsocketTaskSource,
|
task_source: &WebsocketTaskSource,
|
||||||
canceller: &TaskCanceller,
|
canceller: &TaskCanceller,
|
||||||
|
@ -81,12 +81,10 @@ pub fn close_the_websocket_connection(
|
||||||
code: code,
|
code: code,
|
||||||
reason: Some(reason),
|
reason: Some(reason),
|
||||||
};
|
};
|
||||||
task_source
|
let _ = task_source.queue_with_canceller(close_task, &canceller);
|
||||||
.queue_with_canceller(close_task, &canceller)
|
|
||||||
.unwrap();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn fail_the_websocket_connection(
|
fn fail_the_websocket_connection(
|
||||||
address: Trusted<WebSocket>,
|
address: Trusted<WebSocket>,
|
||||||
task_source: &WebsocketTaskSource,
|
task_source: &WebsocketTaskSource,
|
||||||
canceller: &TaskCanceller,
|
canceller: &TaskCanceller,
|
||||||
|
@ -97,9 +95,7 @@ pub fn fail_the_websocket_connection(
|
||||||
code: Some(close_code::ABNORMAL),
|
code: Some(close_code::ABNORMAL),
|
||||||
reason: None,
|
reason: None,
|
||||||
};
|
};
|
||||||
task_source
|
let _ = task_source.queue_with_canceller(close_task, &canceller);
|
||||||
.queue_with_canceller(close_task, &canceller)
|
|
||||||
.unwrap();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[dom_struct]
|
#[dom_struct]
|
||||||
|
@ -220,18 +216,14 @@ impl WebSocket {
|
||||||
address: address.clone(),
|
address: address.clone(),
|
||||||
protocol_in_use,
|
protocol_in_use,
|
||||||
};
|
};
|
||||||
task_source
|
let _ = task_source.queue_with_canceller(open_thread, &canceller);
|
||||||
.queue_with_canceller(open_thread, &canceller)
|
|
||||||
.unwrap();
|
|
||||||
},
|
},
|
||||||
WebSocketNetworkEvent::MessageReceived(message) => {
|
WebSocketNetworkEvent::MessageReceived(message) => {
|
||||||
let message_thread = MessageReceivedTask {
|
let message_thread = MessageReceivedTask {
|
||||||
address: address.clone(),
|
address: address.clone(),
|
||||||
message: message,
|
message: message,
|
||||||
};
|
};
|
||||||
task_source
|
let _ = task_source.queue_with_canceller(message_thread, &canceller);
|
||||||
.queue_with_canceller(message_thread, &canceller)
|
|
||||||
.unwrap();
|
|
||||||
},
|
},
|
||||||
WebSocketNetworkEvent::Fail => {
|
WebSocketNetworkEvent::Fail => {
|
||||||
fail_the_websocket_connection(address.clone(), &task_source, &canceller);
|
fail_the_websocket_connection(address.clone(), &task_source, &canceller);
|
||||||
|
|
|
@ -11248,6 +11248,10 @@
|
||||||
[]
|
[]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"websocket_disconnect_worker.js": [
|
||||||
|
"b8b61957913572b0b121b0aa77c2ec247235fcaa",
|
||||||
|
[]
|
||||||
|
],
|
||||||
"worker_member_test.js": [
|
"worker_member_test.js": [
|
||||||
"abca5cd280ac07914cb21ee4968ac4d27e7feb68",
|
"abca5cd280ac07914cb21ee4968ac4d27e7feb68",
|
||||||
[]
|
[]
|
||||||
|
@ -14598,6 +14602,13 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"websocket_disconnect.html": [
|
||||||
|
"797342743a4bc69d6c8748d0f2dd6841566e6ca5",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"window-postmessage-sameorigin.html": [
|
"window-postmessage-sameorigin.html": [
|
||||||
"cb3bc26e8821b73bcee0455c765362ab731bf3fa",
|
"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