summaryrefslogtreecommitdiff
path: root/ext/web/message_port.rs
diff options
context:
space:
mode:
authorLuca Casonato <hello@lcas.dev>2021-08-25 13:48:53 +0200
committerGitHub <noreply@github.com>2021-08-25 13:48:53 +0200
commit5d814a4c244d489b4ae51002a0cf1d3c2fe16058 (patch)
tree3597ab7d4c438b96c34dac52f9f537989129001e /ext/web/message_port.rs
parentf84cd9403db3545c8058a9c28474b3c99d4c2dd4 (diff)
feat: ArrayBuffer in structured clone transfer (#11840)
Diffstat (limited to 'ext/web/message_port.rs')
-rw-r--r--ext/web/message_port.rs16
1 files changed, 11 insertions, 5 deletions
diff --git a/ext/web/message_port.rs b/ext/web/message_port.rs
index 4af99d501..d8d8e5907 100644
--- a/ext/web/message_port.rs
+++ b/ext/web/message_port.rs
@@ -16,6 +16,7 @@ use tokio::sync::mpsc::UnboundedSender;
enum Transferable {
MessagePort(MessagePort),
+ ArrayBuffer(u32),
}
type MessagePortMessage = (Vec<u8>, Vec<Transferable>);
@@ -127,6 +128,7 @@ pub fn op_message_port_create_entangled(
pub enum JsTransferable {
#[serde(rename_all = "camelCase")]
MessagePort(ResourceId),
+ ArrayBuffer(u32),
}
fn deserialize_js_transferables(
@@ -146,6 +148,9 @@ fn deserialize_js_transferables(
.map_err(|_| type_error("Message port is not ready for transfer"))?;
transferables.push(Transferable::MessagePort(resource.port));
}
+ JsTransferable::ArrayBuffer(id) => {
+ transferables.push(Transferable::ArrayBuffer(id));
+ }
}
}
Ok(transferables)
@@ -165,6 +170,9 @@ fn serialize_transferables(
});
js_transferables.push(JsTransferable::MessagePort(rid));
}
+ Transferable::ArrayBuffer(id) => {
+ js_transferables.push(JsTransferable::ArrayBuffer(id));
+ }
}
}
js_transferables
@@ -182,11 +190,9 @@ pub fn op_message_port_post_message(
data: JsMessageData,
) -> Result<(), AnyError> {
for js_transferable in &data.transferables {
- match js_transferable {
- JsTransferable::MessagePort(id) => {
- if *id == rid {
- return Err(type_error("Can not transfer self message port"));
- }
+ if let JsTransferable::MessagePort(id) = js_transferable {
+ if *id == rid {
+ return Err(type_error("Can not transfer self message port"));
}
}
}