diff options
author | Keith Yeung <kungfukeith11@gmail.com> | 2016-12-11 03:52:08 -0800 |
---|---|---|
committer | Gregory Terzian <gterzian@users.noreply.github.com> | 2019-10-19 14:12:22 +0800 |
commit | c3b17c1201441c9a24c4b272108aea0196fbf1b9 (patch) | |
tree | 0de5b1ba2b8579338ffcf5639e3e06797b9d95ff /components/script/dom/serviceworker.rs | |
parent | 605ddbecd4dfbbb67849cf63774b2d7635fc3601 (diff) | |
download | servo-c3b17c1201441c9a24c4b272108aea0196fbf1b9.tar.gz servo-c3b17c1201441c9a24c4b272108aea0196fbf1b9.zip |
begin messageport, transferable objects, impl
Accept transfer argument for StructuredCloneData::write
Allow structured clone reads to return a boolean
Add Transferable trait
Add basic skeletons to MessagePort
Implement transfer and transfer-receiving steps on MessagePort
Use transfer and transfer_receive in StructuredClone callbacks
Implement MessageChannel
Freeze the array object for the MessageEvent ports attribute
Implement transfer argument on window.postMessage
Use ReentrantMutex instead for MessagePortInternal
Accept origin as a parameter in dispatch_jsval
Fix BorrowMut crash with pending_port_message
Detach port on closure and check for detached during transfer
Enable webmessaging tests
fix webidl
fix
Diffstat (limited to 'components/script/dom/serviceworker.rs')
-rw-r--r-- | components/script/dom/serviceworker.rs | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/components/script/dom/serviceworker.rs b/components/script/dom/serviceworker.rs index dd968c34d94..8d33337f1c5 100644 --- a/components/script/dom/serviceworker.rs +++ b/components/script/dom/serviceworker.rs @@ -19,6 +19,8 @@ use crate::dom::globalscope::GlobalScope; use crate::script_runtime::JSContext; use crate::task::TaskOnce; use dom_struct::dom_struct; +use js::jsapi::JSContext; +use js::jsval::UndefinedValue; use js::rust::HandleValue; use script_traits::{DOMMessage, ScriptMsg}; use servo_url::ServoUrl; @@ -97,14 +99,18 @@ impl ServiceWorkerMethods for ServiceWorker { return Err(Error::InvalidState); } // Step 7 - let data = StructuredCloneData::write(*cx, message)?; - let msg_vec = DOMMessage(data.move_to_arraybuffer()); + rooted!(in(*cx) let transfer = UndefinedValue()); + let data = StructuredCloneData::write(*cx, message, transfer.handle())?; + let msg_vec = DOMMessage { + origin: self.global().origin().immutable().ascii_serialization(), + data: data.move_to_arraybuffer(), + }; let _ = self .global() .script_to_constellation_chan() .send(ScriptMsg::ForwardDOMMessage( msg_vec, - self.scope_url.clone(), + self.scope_url.clone() )); Ok(()) } |