mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
Auto merge of #25561 - pshaughn:formdata-same-file, r=jdm
Make File objects roundtrip through FormData FormData.append now only creates a new File object if it needs to file-wrap a blob or set a filename, and not when appending an existing File with no filename override. The hardest part here was reading the specification in a way that matched browser behavior. --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `___` with appropriate data: --> - [X] `./mach build -d` does not report any errors - [X] `./mach test-tidy` does not report any errors - [X] These changes fix #24939 - [X] There are tests for these changes <!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.--> <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
This commit is contained in:
commit
0bd995cdf5
2 changed files with 10 additions and 14 deletions
|
@ -185,12 +185,19 @@ impl FormDataMethods for FormData {
|
||||||
|
|
||||||
impl FormData {
|
impl FormData {
|
||||||
// https://xhr.spec.whatwg.org/#create-an-entry
|
// https://xhr.spec.whatwg.org/#create-an-entry
|
||||||
// Steps 3-4.
|
|
||||||
fn create_an_entry(&self, blob: &Blob, opt_filename: Option<USVString>) -> DomRoot<File> {
|
fn create_an_entry(&self, blob: &Blob, opt_filename: Option<USVString>) -> DomRoot<File> {
|
||||||
|
// Steps 3-4
|
||||||
let name = match opt_filename {
|
let name = match opt_filename {
|
||||||
Some(filename) => DOMString::from(filename.0),
|
Some(filename) => DOMString::from(filename.0),
|
||||||
None if blob.downcast::<File>().is_none() => DOMString::from("blob"),
|
None => match blob.downcast::<File>() {
|
||||||
None => DOMString::from(""),
|
None => DOMString::from("blob"),
|
||||||
|
// If it is already a file and no filename was given,
|
||||||
|
// then neither step 3 nor step 4 happens, so instead of
|
||||||
|
// creating a new File object we use the existing one.
|
||||||
|
Some(file) => {
|
||||||
|
return DomRoot::from_ref(file);
|
||||||
|
},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
let bytes = blob.get_bytes().unwrap_or(vec![]);
|
let bytes = blob.get_bytes().unwrap_or(vec![]);
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
[formdata-foreach.html]
|
|
||||||
type: testharness
|
|
||||||
[Iterator should return duplicate keys and non-deleted values]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Entries iterator should return duplicate keys and non-deleted values]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Values iterator should return non-deleted values]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue