summaryrefslogtreecommitdiff
path: root/Libraries
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2020-09-28 11:56:26 +0200
committerAndreas Kling <kling@serenityos.org>2020-09-28 11:56:26 +0200
commitceda137bf25df26e53e6c64a04a89d450b43eeb1 (patch)
tree5d0dbae3df3817bb70153fbfb99ba5635191c907 /Libraries
parent2946a684efd1d3c34148d16121b118574b6a9132 (diff)
downloadserenity-ceda137bf25df26e53e6c64a04a89d450b43eeb1.zip
LibWeb: Support <form method=POST>
Use the new support for HTTP method and request body to implement basic support for POST'ed forms. This is pretty cool! :^)
Diffstat (limited to 'Libraries')
-rw-r--r--Libraries/LibWeb/HTML/HTMLFormElement.cpp22
1 files changed, 18 insertions, 4 deletions
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<HTMLInputElement> 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<HTMLInputElement> 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);
}
}