diff --git a/Libraries/LibWeb/HTML/FormControlInfrastructure.cpp b/Libraries/LibWeb/HTML/FormControlInfrastructure.cpp
index ca0c504742d..17ce4f7ca3b 100644
--- a/Libraries/LibWeb/HTML/FormControlInfrastructure.cpp
+++ b/Libraries/LibWeb/HTML/FormControlInfrastructure.cpp
@@ -47,6 +47,7 @@ WebIDL::ExceptionOr create_entry(JS::Realm& realm, String co
if (filename.has_value()) {
FileAPI::FilePropertyBag options {};
options.type = blob->type();
+ options.last_modified = as(*blob).last_modified();
blob = TRY(FileAPI::File::create(realm, { GC::make_root(*blob) }, *filename, move(options)));
}
diff --git a/Tests/LibWeb/Text/expected/wpt-import/xhr/formdata/set-blob.any.txt b/Tests/LibWeb/Text/expected/wpt-import/xhr/formdata/set-blob.any.txt
new file mode 100644
index 00000000000..30abea5ba3b
--- /dev/null
+++ b/Tests/LibWeb/Text/expected/wpt-import/xhr/formdata/set-blob.any.txt
@@ -0,0 +1,10 @@
+Harness status: OK
+
+Found 5 tests
+
+5 Pass
+Pass blob without type
+Pass blob with type
+Pass blob with custom name
+Pass file without lastModified or custom name
+Pass file with lastModified and custom name
\ No newline at end of file
diff --git a/Tests/LibWeb/Text/input/wpt-import/xhr/formdata/set-blob.any.html b/Tests/LibWeb/Text/input/wpt-import/xhr/formdata/set-blob.any.html
new file mode 100644
index 00000000000..000a14254cc
--- /dev/null
+++ b/Tests/LibWeb/Text/input/wpt-import/xhr/formdata/set-blob.any.html
@@ -0,0 +1,15 @@
+
+
+formData.set(blob) and formData.set(file)
+
+
+
+
+
+
diff --git a/Tests/LibWeb/Text/input/wpt-import/xhr/formdata/set-blob.any.js b/Tests/LibWeb/Text/input/wpt-import/xhr/formdata/set-blob.any.js
new file mode 100644
index 00000000000..01946faeab2
--- /dev/null
+++ b/Tests/LibWeb/Text/input/wpt-import/xhr/formdata/set-blob.any.js
@@ -0,0 +1,61 @@
+// META: title=formData.set(blob) and formData.set(file)
+
+"use strict";
+
+const formData = new FormData();
+
+test(() => {
+ const value = new Blob();
+ formData.set("blob-1", value);
+ const blob1 = formData.get("blob-1");
+ assert_not_equals(blob1, value);
+ assert_equals(blob1.constructor.name, "File");
+ assert_equals(blob1.name, "blob");
+ assert_equals(blob1.type, "");
+ assert_equals(formData.get("blob-1") === formData.get("blob-1"), true, "should return the same value when get the same blob entry from FormData");
+ assert_less_than(Math.abs(blob1.lastModified - Date.now()), 200, "lastModified should be now");
+}, "blob without type");
+
+test(() => {
+ const value = new Blob([], { type: "text/plain" });
+ formData.set("blob-2", value);
+ const blob2 = formData.get("blob-2");
+ assert_not_equals(blob2, value);
+ assert_equals(blob2.constructor.name, "File");
+ assert_equals(blob2.name, "blob");
+ assert_equals(blob2.type, "text/plain");
+ assert_less_than(Math.abs(blob2.lastModified - Date.now()), 200, "lastModified should be now");
+}, "blob with type");
+
+test(() => {
+ const value = new Blob();
+ formData.set("blob-3", value, "custom name");
+ const blob3 = formData.get("blob-3");
+ assert_not_equals(blob3, value);
+ assert_equals(blob3.constructor.name, "File");
+ assert_equals(blob3.name, "custom name");
+ assert_equals(blob3.type, "");
+ assert_less_than(Math.abs(blob3.lastModified - Date.now()), 200, "lastModified should be now");
+}, "blob with custom name");
+
+test(() => {
+ const value = new File([], "name");
+ formData.set("file-1", value);
+ const file1 = formData.get("file-1");
+ assert_equals(file1, value);
+ assert_equals(file1.constructor.name, "File");
+ assert_equals(file1.name, "name");
+ assert_equals(file1.type, "");
+ assert_less_than(Math.abs(file1.lastModified - Date.now()), 200, "lastModified should be now");
+}, "file without lastModified or custom name");
+
+test(() => {
+ const value = new File([], "name", { lastModified: 123 });
+ formData.set("file-2", value, "custom name");
+ const file2 = formData.get("file-2");
+ assert_not_equals(file2, value);
+ assert_equals(file2.constructor.name, "File");
+ assert_equals(file2.name, "custom name");
+ assert_equals(file2.type, "");
+ assert_equals(file2.lastModified, 123, "lastModified should be 123");
+}, "file with lastModified and custom name");