Skip to content

Commit 4f736e6

Browse files
samfooMs2ger
authored andcommitted
Trigger WebSocket error event
Trigger a WebSocket error after receiving an invalid message from the server
1 parent b188cb5 commit 4f736e6

File tree

9 files changed

+23
-46
lines changed

9 files changed

+23
-46
lines changed

components/net/websocket_loader.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,11 @@ pub fn init(connect: WebSocketCommunicate, connect_data: WebSocketConnectData, c
107107
for message in receiver.incoming_messages() {
108108
let message: Message = match message {
109109
Ok(m) => m,
110-
Err(_) => break,
110+
Err(e) => {
111+
debug!("Error receiving incoming WebSocket message: {:?}", e);
112+
let _ = resource_event_sender.send(WebSocketNetworkEvent::Fail);
113+
break;
114+
}
111115
};
112116
let message = match message.opcode {
113117
Type::Text => MessageData::Text(String::from_utf8_lossy(&message.payload).into_owned()),

components/script/dom/websocket.rs

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ pub fn close_the_websocket_connection(address: Trusted<WebSocket>,
141141
code: Option<u16>,
142142
reason: String) {
143143
let close_task = box CloseTask {
144-
addr: address,
144+
address: address,
145145
failed: false,
146146
code: code,
147147
reason: Some(reason),
@@ -151,7 +151,7 @@ pub fn close_the_websocket_connection(address: Trusted<WebSocket>,
151151

152152
pub fn fail_the_websocket_connection(address: Trusted<WebSocket>, sender: Box<ScriptChan>) {
153153
let close_task = box CloseTask {
154-
addr: address,
154+
address: address,
155155
failed: true,
156156
code: Some(close_code::ABNORMAL),
157157
reason: None,
@@ -271,7 +271,7 @@ impl WebSocket {
271271
match event {
272272
WebSocketNetworkEvent::ConnectionEstablished(headers, protocols) => {
273273
let open_thread = box ConnectionEstablishedTask {
274-
addr: moved_address.clone(),
274+
address: moved_address.clone(),
275275
headers: headers,
276276
protocols: protocols,
277277
};
@@ -324,7 +324,7 @@ impl WebSocket {
324324
self.clearing_buffer.set(true);
325325

326326
let task = box BufferedAmountTask {
327-
addr: address,
327+
address: address,
328328
};
329329

330330
chan.send(CommonScriptMsg::RunnableMsg(WebSocketEvent, task)).unwrap();
@@ -456,20 +456,20 @@ impl WebSocketMethods for WebSocket {
456456

457457
/// Task queued when *the WebSocket connection is established*.
458458
struct ConnectionEstablishedTask {
459-
addr: Trusted<WebSocket>,
459+
address: Trusted<WebSocket>,
460460
protocols: Vec<String>,
461461
headers: Headers,
462462
}
463463

464464
impl Runnable for ConnectionEstablishedTask {
465465
fn handler(self: Box<Self>) {
466-
let ws = self.addr.root();
466+
let ws = self.address.root();
467467
let global = ws.r().global();
468468

469469
// Step 1: Protocols.
470470
if !self.protocols.is_empty() && self.headers.get::<WebSocketProtocol>().is_none() {
471471
let sender = global.r().networking_task_source();
472-
fail_the_websocket_connection(self.addr, sender);
472+
fail_the_websocket_connection(self.address, sender);
473473
return;
474474
}
475475

@@ -502,7 +502,7 @@ impl Runnable for ConnectionEstablishedTask {
502502
}
503503

504504
struct BufferedAmountTask {
505-
addr: Trusted<WebSocket>,
505+
address: Trusted<WebSocket>,
506506
}
507507

508508
impl Runnable for BufferedAmountTask {
@@ -512,23 +512,23 @@ impl Runnable for BufferedAmountTask {
512512
// reaches step 1. In our implementation, the bytes will already have been sent on a background
513513
// thread.
514514
fn handler(self: Box<Self>) {
515-
let ws = self.addr.root();
515+
let ws = self.address.root();
516516

517517
ws.buffered_amount.set(0);
518518
ws.clearing_buffer.set(false);
519519
}
520520
}
521521

522522
struct CloseTask {
523-
addr: Trusted<WebSocket>,
523+
address: Trusted<WebSocket>,
524524
failed: bool,
525525
code: Option<u16>,
526526
reason: Option<String>,
527527
}
528528

529529
impl Runnable for CloseTask {
530530
fn handler(self: Box<Self>) {
531-
let ws = self.addr.root();
531+
let ws = self.address.root();
532532
let ws = ws.r();
533533
let global = ws.global();
534534

@@ -545,9 +545,7 @@ impl Runnable for CloseTask {
545545

546546
// Step 2.
547547
if self.failed {
548-
ws.upcast().fire_event("error",
549-
EventBubbles::DoesNotBubble,
550-
EventCancelable::Cancelable);
548+
ws.upcast().fire_simple_event("error");
551549
}
552550

553551
// Step 3.
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
[010.html]
22
type: testharness
3-
expected: TIMEOUT
43
[WebSockets: protocol in response but no requested protocol]
5-
expected: TIMEOUT
4+
expected: FAIL
65

tests/wpt/metadata/websockets/constructor/011.html.ini

Lines changed: 0 additions & 6 deletions
This file was deleted.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
[005.html]
2+
type: testharness
3+
[WebSockets: setting HttpOnly cookies in ws response, checking ws request]
4+
expected: FAIL

tests/wpt/metadata/websockets/interfaces/WebSocket/events/015.html.ini

Lines changed: 0 additions & 6 deletions
This file was deleted.

tests/wpt/metadata/websockets/interfaces/WebSocket/events/017.html.ini

Lines changed: 0 additions & 6 deletions
This file was deleted.

tests/wpt/metadata/websockets/interfaces/WebSocket/events/018.html.ini

Lines changed: 0 additions & 9 deletions
This file was deleted.
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
[005.html]
22
type: testharness
3-
expected: TIMEOUT
43
[WebSockets: proper first line]
5-
expected: TIMEOUT
4+
expected: FAIL
65

0 commit comments

Comments
 (0)