Skip to content

Commit

Permalink
LibWeb: Implement XMLHttpRequest.responseURL
Browse files Browse the repository at this point in the history
This was used on https://twinings.co.uk/ so let's support it :^)
  • Loading branch information
awesomekling committed May 1, 2024
1 parent 34f2cbf commit 527ad9a
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 1 deletion.
2 changes: 2 additions & 0 deletions Tests/LibWeb/Text/expected/XHR/XMLHttpRequest-responseURL.txt
@@ -0,0 +1,2 @@
responseURL before: ''
responseURL after: 'data:text/html,hello'
15 changes: 15 additions & 0 deletions Tests/LibWeb/Text/input/XHR/XMLHttpRequest-responseURL.html
@@ -0,0 +1,15 @@
<script src="../include.js"></script>
<script>
asyncTest((done) => {
const xhr = new XMLHttpRequest();
xhr.open("GET", "data:text/html,hello", true);
println("responseURL before: '" + xhr.responseURL + "'");
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
println("responseURL after: '" + xhr.responseURL + "'");
done();
}
};
xhr.send();
});
</script>
12 changes: 12 additions & 0 deletions Userland/Libraries/LibWeb/XHR/XMLHttpRequest.cpp
Expand Up @@ -1265,4 +1265,16 @@ JS::ThrowCompletionOr<void> XMLHttpRequest::request_error_steps(FlyString const&
return {};
}

// https://xhr.spec.whatwg.org/#the-responseurl-attribute
String XMLHttpRequest::response_url()
{
// The responseURL getter steps are to return the empty string if this’s response’s URL is null;
// otherwise its serialization with the exclude fragment flag set.
if (!m_response->url().has_value())
return String {};

auto serialized = m_response->url().value().serialize(URL::ExcludeFragment::Yes);
return String::from_utf8_without_validation(serialized.bytes());
}

}
1 change: 1 addition & 0 deletions Userland/Libraries/LibWeb/XHR/XMLHttpRequest.h
Expand Up @@ -52,6 +52,7 @@ class XMLHttpRequest final : public XMLHttpRequestEventTarget {
WebIDL::ExceptionOr<JS::GCPtr<DOM::Document>> response_xml();
WebIDL::ExceptionOr<JS::Value> response();
Bindings::XMLHttpRequestResponseType response_type() const { return m_response_type; }
String response_url();

WebIDL::ExceptionOr<void> open(String const& method, String const& url);
WebIDL::ExceptionOr<void> open(String const& method, String const& url, bool async, Optional<String> const& username = Optional<String> {}, Optional<String> const& password = Optional<String> {});
Expand Down
2 changes: 1 addition & 1 deletion Userland/Libraries/LibWeb/XHR/XMLHttpRequest.idl
Expand Up @@ -41,7 +41,7 @@ interface XMLHttpRequest : XMLHttpRequestEventTarget {
undefined abort();

// response
// FIXME: readonly attribute USVString responseURL;
readonly attribute USVString responseURL;
readonly attribute unsigned short status;
readonly attribute ByteString statusText;
ByteString? getResponseHeader(ByteString name);
Expand Down

0 comments on commit 527ad9a

Please sign in to comment.