aboutsummaryrefslogtreecommitdiffstats
path: root/components
diff options
context:
space:
mode:
authorSam Gibson <sam@ifdown.net>2015-12-07 14:35:10 +1100
committerMs2ger <Ms2ger@gmail.com>2016-02-26 09:43:12 +0100
commit4f736e6f7c987447db88cf31dfebead748a85a1f (patch)
tree5c5d5bc768ef47475aa4c04eb965bc5787ad2909 /components
parentb188cb542e92f3490b049e8db8473c7e2acf6dc9 (diff)
downloadservo-4f736e6f7c987447db88cf31dfebead748a85a1f.tar.gz
servo-4f736e6f7c987447db88cf31dfebead748a85a1f.zip
Trigger WebSocket error event
Trigger a WebSocket error after receiving an invalid message from the server
Diffstat (limited to 'components')
-rw-r--r--components/net/websocket_loader.rs6
-rw-r--r--components/script/dom/websocket.rs26
2 files changed, 17 insertions, 15 deletions
diff --git a/components/net/websocket_loader.rs b/components/net/websocket_loader.rs
index 305a991e957..ab576077cf8 100644
--- a/components/net/websocket_loader.rs
+++ b/components/net/websocket_loader.rs
@@ -107,7 +107,11 @@ pub fn init(connect: WebSocketCommunicate, connect_data: WebSocketConnectData, c
for message in receiver.incoming_messages() {
let message: Message = match message {
Ok(m) => m,
- Err(_) => break,
+ Err(e) => {
+ debug!("Error receiving incoming WebSocket message: {:?}", e);
+ let _ = resource_event_sender.send(WebSocketNetworkEvent::Fail);
+ break;
+ }
};
let message = match message.opcode {
Type::Text => MessageData::Text(String::from_utf8_lossy(&message.payload).into_owned()),
diff --git a/components/script/dom/websocket.rs b/components/script/dom/websocket.rs
index 438979c2b14..a6d9d9ae358 100644
--- a/components/script/dom/websocket.rs
+++ b/components/script/dom/websocket.rs
@@ -141,7 +141,7 @@ pub fn close_the_websocket_connection(address: Trusted<WebSocket>,
code: Option<u16>,
reason: String) {
let close_task = box CloseTask {
- addr: address,
+ address: address,
failed: false,
code: code,
reason: Some(reason),
@@ -151,7 +151,7 @@ pub fn close_the_websocket_connection(address: Trusted<WebSocket>,
pub fn fail_the_websocket_connection(address: Trusted<WebSocket>, sender: Box<ScriptChan>) {
let close_task = box CloseTask {
- addr: address,
+ address: address,
failed: true,
code: Some(close_code::ABNORMAL),
reason: None,
@@ -271,7 +271,7 @@ impl WebSocket {
match event {
WebSocketNetworkEvent::ConnectionEstablished(headers, protocols) => {
let open_thread = box ConnectionEstablishedTask {
- addr: moved_address.clone(),
+ address: moved_address.clone(),
headers: headers,
protocols: protocols,
};
@@ -324,7 +324,7 @@ impl WebSocket {
self.clearing_buffer.set(true);
let task = box BufferedAmountTask {
- addr: address,
+ address: address,
};
chan.send(CommonScriptMsg::RunnableMsg(WebSocketEvent, task)).unwrap();
@@ -456,20 +456,20 @@ impl WebSocketMethods for WebSocket {
/// Task queued when *the WebSocket connection is established*.
struct ConnectionEstablishedTask {
- addr: Trusted<WebSocket>,
+ address: Trusted<WebSocket>,
protocols: Vec<String>,
headers: Headers,
}
impl Runnable for ConnectionEstablishedTask {
fn handler(self: Box<Self>) {
- let ws = self.addr.root();
+ let ws = self.address.root();
let global = ws.r().global();
// Step 1: Protocols.
if !self.protocols.is_empty() && self.headers.get::<WebSocketProtocol>().is_none() {
let sender = global.r().networking_task_source();
- fail_the_websocket_connection(self.addr, sender);
+ fail_the_websocket_connection(self.address, sender);
return;
}
@@ -502,7 +502,7 @@ impl Runnable for ConnectionEstablishedTask {
}
struct BufferedAmountTask {
- addr: Trusted<WebSocket>,
+ address: Trusted<WebSocket>,
}
impl Runnable for BufferedAmountTask {
@@ -512,7 +512,7 @@ impl Runnable for BufferedAmountTask {
// reaches step 1. In our implementation, the bytes will already have been sent on a background
// thread.
fn handler(self: Box<Self>) {
- let ws = self.addr.root();
+ let ws = self.address.root();
ws.buffered_amount.set(0);
ws.clearing_buffer.set(false);
@@ -520,7 +520,7 @@ impl Runnable for BufferedAmountTask {
}
struct CloseTask {
- addr: Trusted<WebSocket>,
+ address: Trusted<WebSocket>,
failed: bool,
code: Option<u16>,
reason: Option<String>,
@@ -528,7 +528,7 @@ struct CloseTask {
impl Runnable for CloseTask {
fn handler(self: Box<Self>) {
- let ws = self.addr.root();
+ let ws = self.address.root();
let ws = ws.r();
let global = ws.global();
@@ -545,9 +545,7 @@ impl Runnable for CloseTask {
// Step 2.
if self.failed {
- ws.upcast().fire_event("error",
- EventBubbles::DoesNotBubble,
- EventCancelable::Cancelable);
+ ws.upcast().fire_simple_event("error");
}
// Step 3.