mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
Use a BTreeMap to store formdata
I'm really unsure about the MallocSizeOf of BTreeMap as I took the same code as for HashMap. Fixes #13105 Fixes #21381
This commit is contained in:
parent
176d984b3b
commit
08a535a4cb
3 changed files with 34 additions and 31 deletions
|
@ -557,6 +557,36 @@ where
|
|||
}
|
||||
}
|
||||
|
||||
impl<K, V> MallocShallowSizeOf for std::collections::BTreeMap<K, V>
|
||||
where
|
||||
K: Eq + Hash,
|
||||
{
|
||||
fn shallow_size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
|
||||
if ops.has_malloc_enclosing_size_of() {
|
||||
self.values()
|
||||
.next()
|
||||
.map_or(0, |v| unsafe { ops.malloc_enclosing_size_of(v) })
|
||||
} else {
|
||||
self.len() * (size_of::<V>() + size_of::<K>() + size_of::<usize>())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<K, V> MallocSizeOf for std::collections::BTreeMap<K, V>
|
||||
where
|
||||
K: Eq + Hash + MallocSizeOf,
|
||||
V: MallocSizeOf,
|
||||
{
|
||||
fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
|
||||
let mut n = self.shallow_size_of(ops);
|
||||
for (k, v) in self.iter() {
|
||||
n += k.size_of(ops);
|
||||
n += v.size_of(ops);
|
||||
}
|
||||
n
|
||||
}
|
||||
}
|
||||
|
||||
impl<K, V, S> MallocShallowSizeOf for hashglobe::hash_map::HashMap<K, V, S>
|
||||
where
|
||||
K: Eq + Hash,
|
||||
|
|
|
@ -18,19 +18,19 @@ use dom::globalscope::GlobalScope;
|
|||
use dom::htmlformelement::{HTMLFormElement, FormDatumValue, FormDatum};
|
||||
use dom_struct::dom_struct;
|
||||
use html5ever::LocalName;
|
||||
use std::collections::HashMap;
|
||||
use std::collections::hash_map::Entry::{Occupied, Vacant};
|
||||
use std::collections::BTreeMap;
|
||||
use std::collections::btree_map::Entry::{Occupied, Vacant};
|
||||
use std::iter;
|
||||
|
||||
#[dom_struct]
|
||||
pub struct FormData {
|
||||
reflector_: Reflector,
|
||||
data: DomRefCell<HashMap<LocalName, Vec<FormDatum>>>,
|
||||
data: DomRefCell<BTreeMap<LocalName, Vec<FormDatum>>>,
|
||||
}
|
||||
|
||||
impl FormData {
|
||||
fn new_inherited(opt_form: Option<&HTMLFormElement>) -> FormData {
|
||||
let mut hashmap: HashMap<LocalName, Vec<FormDatum>> = HashMap::new();
|
||||
let mut hashmap: BTreeMap<LocalName, Vec<FormDatum>> = BTreeMap::new();
|
||||
|
||||
if let Some(form) = opt_form {
|
||||
for datum in form.get_form_dataset(None) {
|
||||
|
|
|
@ -1,27 +0,0 @@
|
|||
[urlencoded-parser.any.html]
|
||||
[request.formData() with input: a&b&c]
|
||||
expected: FAIL
|
||||
|
||||
[request.formData() with input: a=b&c=d&]
|
||||
expected: FAIL
|
||||
|
||||
[response.formData() with input: a&b&c]
|
||||
expected: FAIL
|
||||
|
||||
[response.formData() with input: &&&a=b&&&&c=d&]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[urlencoded-parser.any.worker.html]
|
||||
[request.formData() with input: a&b&c]
|
||||
expected: FAIL
|
||||
|
||||
[response.formData() with input: a&b&c]
|
||||
expected: FAIL
|
||||
|
||||
[response.formData() with input: a=b&c=d&]
|
||||
expected: FAIL
|
||||
|
||||
[response.formData() with input: a=b&c=d]
|
||||
expected: FAIL
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue