aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/websocket.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/websocket.rs')
-rw-r--r--components/script/dom/websocket.rs99
1 files changed, 49 insertions, 50 deletions
diff --git a/components/script/dom/websocket.rs b/components/script/dom/websocket.rs
index 957793e34cd..8f45c472c76 100644
--- a/components/script/dom/websocket.rs
+++ b/components/script/dom/websocket.rs
@@ -144,9 +144,56 @@ impl WebSocket {
)
}
+ // https://html.spec.whatwg.org/multipage/#dom-websocket-send
+ fn send_impl(&self, data_byte_len: u64) -> Fallible<bool> {
+ let return_after_buffer = match self.ready_state.get() {
+ WebSocketRequestState::Connecting => {
+ return Err(Error::InvalidState);
+ },
+ WebSocketRequestState::Open => false,
+ WebSocketRequestState::Closing | WebSocketRequestState::Closed => true,
+ };
+
+ let address = Trusted::new(self);
+
+ match data_byte_len.checked_add(self.buffered_amount.get()) {
+ None => panic!(),
+ Some(new_amount) => self.buffered_amount.set(new_amount),
+ };
+
+ if return_after_buffer {
+ return Ok(false);
+ }
+
+ if !self.clearing_buffer.get() && self.ready_state.get() == WebSocketRequestState::Open {
+ self.clearing_buffer.set(true);
+
+ let task = Box::new(BufferedAmountTask { address });
+
+ let pipeline_id = self.global().pipeline_id();
+ self.global()
+ .script_chan()
+ // TODO: Use a dedicated `websocket-task-source` task source instead.
+ .send(CommonScriptMsg::Task(
+ WebSocketEvent,
+ task,
+ Some(pipeline_id),
+ WebsocketTaskSource::NAME,
+ ))
+ .unwrap();
+ }
+
+ Ok(true)
+ }
+
+ pub fn origin(&self) -> ImmutableOrigin {
+ self.url.origin()
+ }
+}
+
+impl WebSocketMethods for WebSocket {
/// <https://html.spec.whatwg.org/multipage/#dom-websocket>
- #[allow(non_snake_case)]
- pub fn Constructor(
+ fn Constructor(
global: &GlobalScope,
proto: Option<HandleObject>,
can_gc: CanGc,
@@ -257,54 +304,6 @@ impl WebSocket {
Ok(ws)
}
- // https://html.spec.whatwg.org/multipage/#dom-websocket-send
- fn send_impl(&self, data_byte_len: u64) -> Fallible<bool> {
- let return_after_buffer = match self.ready_state.get() {
- WebSocketRequestState::Connecting => {
- return Err(Error::InvalidState);
- },
- WebSocketRequestState::Open => false,
- WebSocketRequestState::Closing | WebSocketRequestState::Closed => true,
- };
-
- let address = Trusted::new(self);
-
- match data_byte_len.checked_add(self.buffered_amount.get()) {
- None => panic!(),
- Some(new_amount) => self.buffered_amount.set(new_amount),
- };
-
- if return_after_buffer {
- return Ok(false);
- }
-
- if !self.clearing_buffer.get() && self.ready_state.get() == WebSocketRequestState::Open {
- self.clearing_buffer.set(true);
-
- let task = Box::new(BufferedAmountTask { address });
-
- let pipeline_id = self.global().pipeline_id();
- self.global()
- .script_chan()
- // TODO: Use a dedicated `websocket-task-source` task source instead.
- .send(CommonScriptMsg::Task(
- WebSocketEvent,
- task,
- Some(pipeline_id),
- WebsocketTaskSource::NAME,
- ))
- .unwrap();
- }
-
- Ok(true)
- }
-
- pub fn origin(&self) -> ImmutableOrigin {
- self.url.origin()
- }
-}
-
-impl WebSocketMethods for WebSocket {
// https://html.spec.whatwg.org/multipage/#handler-websocket-onopen
event_handler!(open, GetOnopen, SetOnopen);