diff --git a/Libraries/LibWeb/Loader/LoadRequest.h b/Libraries/LibWeb/Loader/LoadRequest.h index 03652601ce..ab8b8b7db3 100644 --- a/Libraries/LibWeb/Loader/LoadRequest.h +++ b/Libraries/LibWeb/Loader/LoadRequest.h @@ -26,6 +26,8 @@ #pragma once +#include +#include #include #include @@ -42,15 +44,40 @@ public: const URL& url() const { return m_url; } void set_url(const URL& url) { m_url = url; } - unsigned hash() const { return m_url.to_string().hash(); } + const String& method() const { return m_method; } + void set_method(const String& method) { m_method = method; } + + const ByteBuffer& body() const { return m_body; } + void set_body(const ByteBuffer& body) { m_body = body; } + + unsigned hash() const + { + // FIXME: Include headers in the hash as well + return pair_int_hash(pair_int_hash(m_url.to_string().hash(), m_method.hash()), string_hash((const char*)m_body.data(), m_body.size())); + } bool operator==(const LoadRequest& other) const { - return m_url == other.m_url; + if (m_headers.size() != other.m_headers.size()) + return false; + for (auto& it : m_headers) { + auto jt = other.m_headers.find(it.key); + if (jt == other.m_headers.end()) + return false; + } + return m_url == other.m_url && m_method == other.m_method && m_body == other.m_body; } + void set_header(const String& name, const String& value) { m_headers.set(name, value); } + String header(const String& name) const { return m_headers.get(name).value_or({}); } + + const HashMap& headers() const { return m_headers; } + private: URL m_url; + String m_method { "GET" }; + HashMap m_headers; + ByteBuffer m_body; }; }