diff options
Diffstat (limited to 'components/script/dom/bindings/transferable.rs')
-rw-r--r-- | components/script/dom/bindings/transferable.rs | 43 |
1 files changed, 35 insertions, 8 deletions
diff --git a/components/script/dom/bindings/transferable.rs b/components/script/dom/bindings/transferable.rs index 674d652119b..7c052e41294 100644 --- a/components/script/dom/bindings/transferable.rs +++ b/components/script/dom/bindings/transferable.rs @@ -5,18 +5,45 @@ //! Trait representing the concept of [transferable objects] //! (<https://html.spec.whatwg.org/multipage/#transferable-objects>). -use js::jsapi::MutableHandleObject; +use std::collections::HashMap; +use std::num::NonZeroU32; + +use base::id::PipelineNamespaceId; use crate::dom::bindings::reflector::DomObject; -use crate::dom::bindings::structuredclone::{StructuredDataReader, StructuredDataWriter}; +use crate::dom::bindings::root::DomRoot; +use crate::dom::bindings::structuredclone::{StructuredData, StructuredDataReader}; use crate::dom::globalscope::GlobalScope; -pub(crate) trait Transferable: DomObject { - fn transfer(&self, sc_writer: &mut StructuredDataWriter) -> Result<u64, ()>; +pub(crate) trait IdFromComponents +where + Self: Sized, +{ + fn from(namespace_id: PipelineNamespaceId, index: NonZeroU32) -> Self; +} + +pub(crate) trait ExtractComponents { + fn components(&self) -> (PipelineNamespaceId, NonZeroU32); +} + +pub(crate) trait Transferable: DomObject +where + Self: Sized, +{ + type Id: Eq + std::hash::Hash + Copy + IdFromComponents + ExtractComponents; + type Data; + + fn can_transfer(&self) -> bool { + true + } + + fn transfer(&self) -> Result<(Self::Id, Self::Data), ()>; fn transfer_receive( owner: &GlobalScope, - sc_reader: &mut StructuredDataReader, - extra_data: u64, - return_object: MutableHandleObject, - ) -> Result<(), ()>; + id: Self::Id, + serialized: Self::Data, + ) -> Result<DomRoot<Self>, ()>; + + fn serialized_storage(data: StructuredData<'_>) -> &mut Option<HashMap<Self::Id, Self::Data>>; + fn deserialized_storage(reader: &mut StructuredDataReader) -> &mut Option<Vec<DomRoot<Self>>>; } |