fix: File to FormData not correctly handling name and lastModified (#36458)

Set File's lastModified when reconstructing from Blob for FormData
Remove special character replacement in fileName (spec removed this
step)

Testing: WPT tests exist
Fixes: #22744 (if I undertand the issue correctly the filename issue was
already fixed and now this fixes the lastModified part)

Signed-off-by: Sebastian C <sebsebmc@gmail.com>
This commit is contained in:
Sebastian C 2025-04-11 12:59:03 -05:00 committed by GitHub
parent 5c7cf7aed6
commit 2d2cfade36
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 7 additions and 21 deletions

View file

@ -108,6 +108,10 @@ impl File {
pub(crate) fn file_type(&self) -> String {
self.blob.type_string()
}
pub(crate) fn get_modified(&self) -> SystemTime {
self.modified
}
}
impl FileMethods<crate::DomTypeHolder> for File {
@ -132,15 +136,12 @@ impl FileMethods<crate::DomTypeHolder> for File {
.map(|modified| OffsetDateTime::UNIX_EPOCH + Duration::milliseconds(modified))
.map(Into::into);
// NOTE: Following behaviour might be removed in future,
// see https://github.com/w3c/FileAPI/issues/41
let replaced_filename = DOMString::from_string(filename.replace('/', ":"));
let type_string = normalize_type_string(blobPropertyBag.type_.as_ref());
Ok(File::new_with_proto(
global,
proto,
BlobImpl::new_from_bytes(bytes, type_string),
replaced_filename,
filename,
modified,
can_gc,
))

View file

@ -275,12 +275,13 @@ impl FormData {
};
let bytes = blob.get_bytes().unwrap_or_default();
let last_modified = blob.downcast::<File>().map(|file| file.get_modified());
File::new(
&self.global(),
BlobImpl::new_from_bytes(bytes, blob.type_string()),
name,
None,
last_modified,
can_gc,
)
}

View file

@ -1,8 +0,0 @@
[File-constructor.any.html]
[No replacement when using special character in fileName]
expected: FAIL
[File-constructor.any.worker.html]
[No replacement when using special character in fileName]
expected: FAIL

View file

@ -1,8 +0,0 @@
[set-blob.any.html]
[file with lastModified and custom name]
expected: FAIL
[set-blob.any.worker.html]
[file with lastModified and custom name]
expected: FAIL