mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
No tracing of nop traceable fields (#29926)
* Add `no_trace` option to JSTraceable derive * NoTrace wrapper * Port some types to no_trace schematics * Fixing my unsafe mistakes (not tracing traceables) * Add docs & safety guards for no_trace Safety guards (trait shenanigans) guarantees safety usage of `no_trace` * Port canvas_traits to no_trace * Port servo_media to no_trace * Port net_traits to no_trace * Port style to no_trace * Port webgpu to no_trace * Port script_traits to no_trace * Port canvas_traits, devtools_traits, embedder_traits, profile_traits to no_trace * unrooted_must_root lint in seperate file * Add trace_in_no_trace_lint as script_plugin * Composable types in must_not_have_traceable * Introduced HashMapTracedValues wrapper * `HashMap<NoTrace<K>,V>`->`HashMapTracedValues<K,V>` * Port rest of servo's types to no_trace * Port html5ever, euclid, mime and http to no_trace * Port remaining externals to no_trace * Port webxr and Arc<Mutex<_>> * Fix spelling in notrace doc
This commit is contained in:
parent
66e0d543cf
commit
9514f670d1
167 changed files with 1903 additions and 1020 deletions
|
@ -20,10 +20,12 @@ use html5ever::LocalName;
|
|||
use js::rust::HandleObject;
|
||||
use script_traits::serializable::BlobImpl;
|
||||
|
||||
use super::bindings::trace::NoTrace;
|
||||
|
||||
#[dom_struct]
|
||||
pub struct FormData {
|
||||
reflector_: Reflector,
|
||||
data: DomRefCell<Vec<(LocalName, FormDatum)>>,
|
||||
data: DomRefCell<Vec<(NoTrace<LocalName>, FormDatum)>>,
|
||||
}
|
||||
|
||||
impl FormData {
|
||||
|
@ -31,8 +33,8 @@ impl FormData {
|
|||
let data = match form_datums {
|
||||
Some(data) => data
|
||||
.iter()
|
||||
.map(|datum| (LocalName::from(datum.name.as_ref()), datum.clone()))
|
||||
.collect::<Vec<(LocalName, FormDatum)>>(),
|
||||
.map(|datum| (NoTrace(LocalName::from(datum.name.as_ref())), datum.clone()))
|
||||
.collect::<Vec<(NoTrace<LocalName>, FormDatum)>>(),
|
||||
None => Vec::new(),
|
||||
};
|
||||
|
||||
|
@ -87,7 +89,7 @@ impl FormDataMethods for FormData {
|
|||
|
||||
self.data
|
||||
.borrow_mut()
|
||||
.push((LocalName::from(name.0), datum));
|
||||
.push((NoTrace(LocalName::from(name.0)), datum));
|
||||
}
|
||||
|
||||
#[allow(unrooted_must_root)]
|
||||
|
@ -101,14 +103,14 @@ impl FormDataMethods for FormData {
|
|||
|
||||
self.data
|
||||
.borrow_mut()
|
||||
.push((LocalName::from(name.0), datum));
|
||||
.push((NoTrace(LocalName::from(name.0)), datum));
|
||||
}
|
||||
|
||||
// https://xhr.spec.whatwg.org/#dom-formdata-delete
|
||||
fn Delete(&self, name: USVString) {
|
||||
self.data
|
||||
.borrow_mut()
|
||||
.retain(|(datum_name, _)| datum_name != &LocalName::from(name.0.clone()));
|
||||
.retain(|(datum_name, _)| datum_name.0 != LocalName::from(name.0.clone()));
|
||||
}
|
||||
|
||||
// https://xhr.spec.whatwg.org/#dom-formdata-get
|
||||
|
@ -116,7 +118,7 @@ impl FormDataMethods for FormData {
|
|||
self.data
|
||||
.borrow()
|
||||
.iter()
|
||||
.filter(|(datum_name, _)| datum_name == &LocalName::from(name.0.clone()))
|
||||
.filter(|(datum_name, _)| datum_name.0 == LocalName::from(name.0.clone()))
|
||||
.next()
|
||||
.map(|(_, datum)| match &datum.value {
|
||||
FormDatumValue::String(ref s) => {
|
||||
|
@ -131,12 +133,12 @@ impl FormDataMethods for FormData {
|
|||
self.data
|
||||
.borrow()
|
||||
.iter()
|
||||
.filter_map(|datum| {
|
||||
if datum.0 != LocalName::from(name.0.clone()) {
|
||||
.filter_map(|(datum_name, datum)| {
|
||||
if datum_name.0 != LocalName::from(name.0.clone()) {
|
||||
return None;
|
||||
}
|
||||
|
||||
Some(match &datum.1.value {
|
||||
Some(match &datum.value {
|
||||
FormDatumValue::String(ref s) => {
|
||||
FileOrUSVString::USVString(USVString(s.to_string()))
|
||||
},
|
||||
|
@ -151,7 +153,7 @@ impl FormDataMethods for FormData {
|
|||
self.data
|
||||
.borrow()
|
||||
.iter()
|
||||
.any(|(datum_name, _0)| datum_name == &LocalName::from(name.0.clone()))
|
||||
.any(|(datum_name, _0)| datum_name.0 == LocalName::from(name.0.clone()))
|
||||
}
|
||||
|
||||
// https://xhr.spec.whatwg.org/#dom-formdata-set
|
||||
|
@ -159,10 +161,10 @@ impl FormDataMethods for FormData {
|
|||
let mut data = self.data.borrow_mut();
|
||||
let local_name = LocalName::from(name.0.clone());
|
||||
|
||||
data.retain(|(datum_name, _)| datum_name != &local_name);
|
||||
data.retain(|(datum_name, _)| datum_name.0 != local_name);
|
||||
|
||||
data.push((
|
||||
local_name,
|
||||
NoTrace(local_name),
|
||||
FormDatum {
|
||||
ty: DOMString::from("string"),
|
||||
name: DOMString::from(name.0),
|
||||
|
@ -177,10 +179,10 @@ impl FormDataMethods for FormData {
|
|||
let mut data = self.data.borrow_mut();
|
||||
let local_name = LocalName::from(name.0.clone());
|
||||
|
||||
data.retain(|(datum_name, _)| datum_name != &local_name);
|
||||
data.retain(|(datum_name, _)| datum_name.0 != local_name);
|
||||
|
||||
data.push((
|
||||
LocalName::from(name.0.clone()),
|
||||
NoTrace(LocalName::from(name.0.clone())),
|
||||
FormDatum {
|
||||
ty: DOMString::from("file"),
|
||||
name: DOMString::from(name.0),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue