From 7ef4d75716373ebc312490494455a616e30b8ae6 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 19 Sep 2021 22:32:33 +0200 Subject: [PATCH] LibWeb: Implement XMLHttpRequest.getAllResponseHeaders() --- .../Libraries/LibWeb/XHR/XMLHttpRequest.cpp | 19 +++++++++++++++++++ .../Libraries/LibWeb/XHR/XMLHttpRequest.h | 1 + .../Libraries/LibWeb/XHR/XMLHttpRequest.idl | 1 + 3 files changed, 21 insertions(+) diff --git a/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.cpp b/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.cpp index d211d221a8..2392c302a5 100644 --- a/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.cpp +++ b/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.cpp @@ -5,6 +5,7 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include #include #include #include @@ -271,4 +272,22 @@ void XMLHttpRequest::set_onreadystatechange(HTML::EventHandler value) set_event_handler_attribute(Web::XHR::EventNames::readystatechange, move(value)); } +// https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method +String XMLHttpRequest::get_all_response_headers() const +{ + // FIXME: Implement the spec-compliant sort order. + + StringBuilder builder; + auto keys = m_response_headers.keys(); + quick_sort(keys); + + for (auto& key : keys) { + builder.append(key); + builder.append(": "); + builder.append(m_response_headers.get(key).value()); + builder.append("\r\n"); + } + return builder.to_string(); +} + } diff --git a/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.h b/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.h index 3449ce8c36..2b91d9230f 100644 --- a/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.h +++ b/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.h @@ -57,6 +57,7 @@ public: DOM::ExceptionOr set_request_header(const String& header, const String& value); String get_response_header(const String& name) { return m_response_headers.get(name).value_or({}); } + String get_all_response_headers() const; HTML::EventHandler onreadystatechange(); void set_onreadystatechange(HTML::EventHandler); diff --git a/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.idl b/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.idl index 39298e278a..569b3f00b3 100644 --- a/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.idl +++ b/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.idl @@ -17,6 +17,7 @@ interface XMLHttpRequest : XMLHttpRequestEventTarget { undefined send(); ByteString? getResponseHeader(ByteString name); + ByteString getAllResponseHeaders(); attribute EventHandler onreadystatechange;