Files
servo/components/shared/storage/webstorage_thread.rs
Jan Varga a2195e5924 libservo: Extend SiteDataManager::clear_site_data to clear sessionStorage (#41709)
sessionStorage entries are identified via their associated origins and
removed
across all browsing contexts. This brings sessionStorage in line with
cookies,
which were already handled by the API.

Both public and private browsing contexts are included in the clearing
operation.

The necessary support has been added to the storage crate to clear
WebStorage
data.

Testing: A new integration test has been added.

Signed-off-by: Jan Varga <jvarga@igalia.com>
2026-01-06 17:40:42 +00:00

105 lines
3.1 KiB
Rust

/* 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/. */
use base::generic_channel::GenericSender;
use base::id::WebViewId;
use malloc_size_of_derive::MallocSizeOf;
use profile_traits::mem::ReportsChan;
use serde::{Deserialize, Serialize};
use servo_url::ServoUrl;
#[derive(Clone, Copy, Debug, Deserialize, MallocSizeOf, Serialize)]
pub enum WebStorageType {
Session,
Local,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct OriginDescriptor {
pub name: String,
}
impl OriginDescriptor {
pub fn new(name: String) -> Self {
OriginDescriptor { name }
}
}
/// Request operations on the storage data associated with a particular url
#[derive(Debug, Deserialize, Serialize)]
pub enum WebStorageThreadMsg {
/// gets the number of key/value pairs present in the associated storage data
Length(GenericSender<usize>, WebStorageType, WebViewId, ServoUrl),
/// gets the name of the key at the specified index in the associated storage data
Key(
GenericSender<Option<String>>,
WebStorageType,
WebViewId,
ServoUrl,
u32,
),
/// Gets the available keys in the associated storage data
Keys(
GenericSender<Vec<String>>,
WebStorageType,
WebViewId,
ServoUrl,
),
/// gets the value associated with the given key in the associated storage data
GetItem(
GenericSender<Option<String>>,
WebStorageType,
WebViewId,
ServoUrl,
String,
),
/// sets the value of the given key in the associated storage data
SetItem(
GenericSender<Result<(bool, Option<String>), ()>>,
WebStorageType,
WebViewId,
ServoUrl,
String,
String,
),
/// removes the key/value pair for the given key in the associated storage data
RemoveItem(
GenericSender<Option<String>>,
WebStorageType,
WebViewId,
ServoUrl,
String,
),
/// clears the associated storage data by removing all the key/value pairs
Clear(GenericSender<bool>, WebStorageType, WebViewId, ServoUrl),
/// clones all storage data of the given top-level browsing context for a new browsing context.
/// should only be used for sessionStorage.
Clone {
sender: GenericSender<()>,
src: WebViewId,
dest: WebViewId,
},
/// gets the list of origin descriptors for given storage type
///
/// TODO: Consider returning `Vec<SiteDescriptor>`
ListOrigins(GenericSender<Vec<OriginDescriptor>>, WebStorageType),
/// clears storage data for given storage type and sites, affecting all matching origins
ClearDataForSites(GenericSender<()>, WebStorageType, Vec<String>),
/// send a reply when done cleaning up thread resources and then shut it down
Exit(GenericSender<()>),
/// Measure memory used by this thread and send the report over the provided channel.
CollectMemoryReport(ReportsChan),
}