aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/websocket.rs
diff options
context:
space:
mode:
authorDavid Raifaizen <d-raif@hotmail.com>2016-01-06 19:41:52 -0500
committerDavid Raifaizen <d-raif@hotmail.com>2016-01-06 19:41:52 -0500
commit76f689cd0626540d8db5d12b4d827d89748a9ab7 (patch)
tree456bc2ddb415071ba7fe37e53005200703475ff9 /components/script/dom/websocket.rs
parent238a8786de66344d2dd6855dca25a4d4be6fa949 (diff)
downloadservo-76f689cd0626540d8db5d12b4d827d89748a9ab7.tar.gz
servo-76f689cd0626540d8db5d12b4d827d89748a9ab7.zip
Changed blob to use DataSlice with Arc in order to limit wasteful copying of byte vector
Diffstat (limited to 'components/script/dom/websocket.rs')
-rw-r--r--components/script/dom/websocket.rs9
1 files changed, 5 insertions, 4 deletions
diff --git a/components/script/dom/websocket.rs b/components/script/dom/websocket.rs
index 35e3095293f..73c488326c5 100644
--- a/components/script/dom/websocket.rs
+++ b/components/script/dom/websocket.rs
@@ -381,19 +381,20 @@ impl WebSocketMethods for WebSocket {
}
// https://html.spec.whatwg.org/multipage/#dom-websocket-send
- fn Send_(&self, data: &Blob) -> Fallible<()> {
+ fn Send_(&self, blob: &Blob) -> Fallible<()> {
/* As per https://html.spec.whatwg.org/multipage/#websocket
the buffered amount needs to be clamped to u32, even though Blob.Size() is u64
If the buffer limit is reached in the first place, there are likely other major problems
*/
- let data_byte_len = data.Size();
+ let data_byte_len = blob.Size();
let send_data = try!(self.send_impl(data_byte_len));
if send_data {
let mut other_sender = self.sender.borrow_mut();
let my_sender = other_sender.as_mut().unwrap();
- let _ = my_sender.send(WebSocketDomAction::SendMessage(MessageData::Binary(data.clone_bytes())));
+ let bytes = blob.get_data().get_bytes().to_vec();
+ let _ = my_sender.send(WebSocketDomAction::SendMessage(MessageData::Binary(bytes)));
}
Ok(())
@@ -579,7 +580,7 @@ impl Runnable for MessageReceivedTask {
MessageData::Binary(data) => {
match ws.binary_type.get() {
BinaryType::Blob => {
- let blob = Blob::new(global.r(), Some(data), "");
+ let blob = Blob::new(global.r(), data, "");
blob.to_jsval(cx, message.handle_mut());
}
BinaryType::Arraybuffer => {