diff --git a/Libraries/LibWeb/HTML/HTMLFormElement.cpp b/Libraries/LibWeb/HTML/HTMLFormElement.cpp
index 566c82022c..f7307d5227 100644
--- a/Libraries/LibWeb/HTML/HTMLFormElement.cpp
+++ b/Libraries/LibWeb/HTML/HTMLFormElement.cpp
@@ -50,8 +50,8 @@ void HTMLFormElement::submit(RefPtr submitter)
}
auto effective_method = method().to_lowercase();
- if (effective_method != "get") {
- if (effective_method == "post" || effective_method == "dialog") {
+ if (effective_method != "get" && effective_method != "post") {
+ if (effective_method == "dialog") {
dbg() << "Unsupported form method '" << method() << "'";
return;
}
@@ -69,10 +69,24 @@ void HTMLFormElement::submit(RefPtr submitter)
return IterationDecision::Continue;
});
- url.set_query(urlencode(parameters));
+ if (effective_method == "get") {
+ url.set_query(urlencode(parameters));
+ }
// FIXME: We shouldn't let the form just do this willy-nilly.
- document().frame()->page().load(url);
+
+ LoadRequest request;
+ request.set_url(url);
+
+ if (effective_method == "post") {
+ auto body = urlencode(parameters).to_byte_buffer();
+ request.set_method("POST");
+ request.set_header("Content-Type", "application/x-www-form-urlencoded");
+ request.set_header("Content-Length", String::number(body.size()));
+ request.set_body(body);
+ }
+
+ document().frame()->page().load(request);
}
}