aboutsummaryrefslogtreecommitdiffstats
path: root/components/shared/script/serializable.rs
diff options
context:
space:
mode:
authorMartin Robinson <mrobinson@igalia.com>2025-04-06 00:13:29 +0200
committerGitHub <noreply@github.com>2025-04-05 22:13:29 +0000
commit6031a12fd1fa4aee8368e0b3dc0cb792caac56bc (patch)
treecc91327012041a24bd1b71c7768660a2efbe862f /components/shared/script/serializable.rs
parenta67409fb253b3cb6dd1adbaf9d3cad47941f4993 (diff)
downloadservo-6031a12fd1fa4aee8368e0b3dc0cb792caac56bc.tar.gz
servo-6031a12fd1fa4aee8368e0b3dc0cb792caac56bc.zip
Move `ScriptToConstellationMsg` to `constellation_traits` (#36364)
This is the last big change necessary to create the `constellation_traits` crate. This moves the data structure for messages that originate from the `ScriptThread` and are sent to the `Contellation` to `constellation_traits`, effectively splitting `script_traits` in half. Before, `script_traits` was responsible for exposing the API of both the `ScriptThread` and the `Constellation` to the rest of Servo. - Data structures that are used by `ScriptToConstellationMsg` are moved to `constellation_traits`. The dependency graph looks a bit like this: `script_layout_interface` depends on `script_traits` depends on `constellation_traits` depends on `embedder_traits`. - Data structures that are used in the embedding layer (`UntrustedNodeAddress`, `CompositorHitTestResult`, `TouchEventResult` and `AnimationState`) are moved to embedder_traits, to avoid a dependency cycle between `webrender_traits` and `constellation_traits`. - Types dealing with MessagePorts and serialization are moved to `constellation_traits::message_port`. Testing: This is covered by existing tests as it just moves types around. Signed-off-by: Martin Robinson <mrobinson@igalia.com> Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Diffstat (limited to 'components/shared/script/serializable.rs')
-rw-r--r--components/shared/script/serializable.rs217
1 files changed, 0 insertions, 217 deletions
diff --git a/components/shared/script/serializable.rs b/components/shared/script/serializable.rs
deleted file mode 100644
index 5d89c622bee..00000000000
--- a/components/shared/script/serializable.rs
+++ /dev/null
@@ -1,217 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
-
-//! This module contains implementations in script that are serializable,
-//! as per <https://html.spec.whatwg.org/multipage/#serializable-objects>.
-//! The implementations are here instead of in script
-//! so that the other modules involved in the serialization don't have
-//! to depend on script.
-
-use std::cell::RefCell;
-use std::path::PathBuf;
-
-use base::id::{BlobId, DomPointId};
-use malloc_size_of_derive::MallocSizeOf;
-use net_traits::filemanager_thread::RelativePos;
-use serde::{Deserialize, Serialize};
-use uuid::Uuid;
-
-/// File-based blob
-#[derive(Debug, Deserialize, MallocSizeOf, Serialize)]
-pub struct FileBlob {
- #[ignore_malloc_size_of = "Uuid are hard(not really)"]
- id: Uuid,
- #[ignore_malloc_size_of = "PathBuf are hard"]
- name: Option<PathBuf>,
- cache: RefCell<Option<Vec<u8>>>,
- size: u64,
-}
-
-impl FileBlob {
- /// Create a new file blob.
- pub fn new(id: Uuid, name: Option<PathBuf>, cache: Option<Vec<u8>>, size: u64) -> FileBlob {
- FileBlob {
- id,
- name,
- cache: RefCell::new(cache),
- size,
- }
- }
-
- /// Get the size of the file.
- pub fn get_size(&self) -> u64 {
- self.size
- }
-
- /// Get the cached file data, if any.
- pub fn get_cache(&self) -> Option<Vec<u8>> {
- self.cache.borrow().clone()
- }
-
- /// Cache data.
- pub fn cache_bytes(&self, bytes: Vec<u8>) {
- *self.cache.borrow_mut() = Some(bytes);
- }
-
- /// Get the file id.
- pub fn get_id(&self) -> Uuid {
- self.id
- }
-}
-
-impl crate::BroadcastClone for BlobImpl {
- type Id = BlobId;
-
- fn source(
- data: &crate::StructuredSerializedData,
- ) -> &Option<std::collections::HashMap<Self::Id, Self>> {
- &data.blobs
- }
-
- fn destination(
- data: &mut crate::StructuredSerializedData,
- ) -> &mut Option<std::collections::HashMap<Self::Id, Self>> {
- &mut data.blobs
- }
-
- fn clone_for_broadcast(&self) -> Option<Self> {
- let type_string = self.type_string();
-
- if let BlobData::Memory(bytes) = self.blob_data() {
- let blob_clone = BlobImpl::new_from_bytes(bytes.clone(), type_string);
-
- // Note: we insert the blob at the original id,
- // otherwise this will not match the storage key as serialized by SM in `serialized`.
- // The clone has it's own new Id however.
- return Some(blob_clone);
- } else {
- // Not panicking only because this is called from the constellation.
- log::warn!("Serialized blob not in memory format(should never happen).");
- }
- None
- }
-}
-
-/// The data backing a DOM Blob.
-#[derive(Debug, Deserialize, MallocSizeOf, Serialize)]
-pub struct BlobImpl {
- /// UUID of the blob.
- blob_id: BlobId,
- /// Content-type string
- type_string: String,
- /// Blob data-type.
- blob_data: BlobData,
- /// Sliced blobs referring to this one.
- slices: Vec<BlobId>,
-}
-
-/// Different backends of Blob
-#[derive(Debug, Deserialize, MallocSizeOf, Serialize)]
-pub enum BlobData {
- /// File-based blob, whose content lives in the net process
- File(FileBlob),
- /// Memory-based blob, whose content lives in the script process
- Memory(Vec<u8>),
- /// Sliced blob, including parent blob-id and
- /// relative positions of current slicing range,
- /// IMPORTANT: The depth of tree is only two, i.e. the parent Blob must be
- /// either File-based or Memory-based
- Sliced(BlobId, RelativePos),
-}
-
-impl BlobImpl {
- /// Construct memory-backed BlobImpl
- pub fn new_from_bytes(bytes: Vec<u8>, type_string: String) -> BlobImpl {
- let blob_id = BlobId::new();
- let blob_data = BlobData::Memory(bytes);
- BlobImpl {
- blob_id,
- type_string,
- blob_data,
- slices: vec![],
- }
- }
-
- /// Construct file-backed BlobImpl from File ID
- pub fn new_from_file(file_id: Uuid, name: PathBuf, size: u64, type_string: String) -> BlobImpl {
- let blob_id = BlobId::new();
- let blob_data = BlobData::File(FileBlob {
- id: file_id,
- name: Some(name),
- cache: RefCell::new(None),
- size,
- });
- BlobImpl {
- blob_id,
- type_string,
- blob_data,
- slices: vec![],
- }
- }
-
- /// Construct a BlobImpl from a slice of a parent.
- pub fn new_sliced(rel_pos: RelativePos, parent: BlobId, type_string: String) -> BlobImpl {
- let blob_id = BlobId::new();
- let blob_data = BlobData::Sliced(parent, rel_pos);
- BlobImpl {
- blob_id,
- type_string,
- blob_data,
- slices: vec![],
- }
- }
-
- /// Get a clone of the blob-id
- pub fn blob_id(&self) -> BlobId {
- self.blob_id
- }
-
- /// Get a clone of the type-string
- pub fn type_string(&self) -> String {
- self.type_string.clone()
- }
-
- /// Get a mutable ref to the data
- pub fn blob_data(&self) -> &BlobData {
- &self.blob_data
- }
-
- /// Get a mutable ref to the data
- pub fn blob_data_mut(&mut self) -> &mut BlobData {
- &mut self.blob_data
- }
-}
-
-#[derive(Clone, Debug, Deserialize, MallocSizeOf, Serialize)]
-/// A serializable version of the DOMPoint/DOMPointReadOnly interface.
-pub struct DomPoint {
- /// The x coordinate.
- pub x: f64,
- /// The y coordinate.
- pub y: f64,
- /// The z coordinate.
- pub z: f64,
- /// The w coordinate.
- pub w: f64,
-}
-
-impl crate::BroadcastClone for DomPoint {
- type Id = DomPointId;
-
- fn source(
- data: &crate::StructuredSerializedData,
- ) -> &Option<std::collections::HashMap<Self::Id, Self>> {
- &data.points
- }
-
- fn destination(
- data: &mut crate::StructuredSerializedData,
- ) -> &mut Option<std::collections::HashMap<Self::Id, Self>> {
- &mut data.points
- }
-
- fn clone_for_broadcast(&self) -> Option<Self> {
- Some(self.clone())
- }
-}