The HTML spec's algorithm to construct the entry list (https://html.spec.whatwg.org/#constructing-the-form-data-set) requires that an <input type=file> control with no selected files is represented in the entry list as a File object. And WebKit follows this for the multipart/form-data enctype, but in the urlencoded and text/plain serializations that entry simply doesn't show up in the payload. Tests: https://wpt.fyi/results/html/semantics/forms/form-submission-0/form-data-set-empty-file.window.html?label=pr_head&max-count=1&pr=27523 (this test file also tests for bug 185416)
<rdar://problem/74348545>
Created attachment 444206 [details] Patch
Committed r285808 (244252@main): <https://commits.webkit.org/244252@main> All reviewed patches have been landed. Closing bug and clearing flags on attachment 444206 [details].
Comment on attachment 444206 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=444206&action=review > Source/WebCore/html/FileInputType.cpp:174 > + formData.append(name, ""); I think this should probably be emptyString() instead of "", for better efficiency.
Comment on attachment 444206 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=444206&action=review >> Source/WebCore/html/FileInputType.cpp:174 >> + formData.append(name, ""); > > I think this should probably be emptyString() instead of "", for better efficiency. Fixing this in https://bugs.webkit.org/show_bug.cgi?id=233229
This change should be present in STP 139, iOS 15.4 Beta, and macOS 12.3 Beta.