mirror of
https://github.com/servo/servo
synced 2026-05-11 17:37:21 +02:00
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>
105 lines
3.1 KiB
Rust
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),
|
|
}
|