diff --git a/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.cpp b/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.cpp index d7224f87a5..309be13573 100644 --- a/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.cpp +++ b/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.cpp @@ -291,4 +291,21 @@ String XMLHttpRequest::get_all_response_headers() const return builder.to_string(); } +// https://xhr.spec.whatwg.org/#dom-xmlhttprequest-overridemimetype +DOM::ExceptionOr XMLHttpRequest::override_mime_type(String const& mime) +{ + // 1. If this’s state is loading or done, then throw an "InvalidStateError" DOMException. + if (m_ready_state == ReadyState::Loading || m_ready_state == ReadyState::Done) + return DOM::InvalidStateError::create("Cannot override MIME type when state is Loading or Done."); + + // 2. Set this’s override MIME type to the result of parsing mime. + m_override_mime_type = MimeSniff::MimeType::from_string(mime); + + // 3. If this’s override MIME type is failure, then set this’s override MIME type to application/octet-stream. + if (!m_override_mime_type.has_value()) + m_override_mime_type = MimeSniff::MimeType("application"sv, "octet-stream"sv); + + return {}; +} + } diff --git a/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.h b/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.h index 62e7e420b4..5c980701bd 100644 --- a/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.h +++ b/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.h @@ -14,6 +14,7 @@ #include #include #include +#include #include namespace Web::XHR { @@ -62,6 +63,8 @@ public: Bindings::CallbackType* onreadystatechange(); void set_onreadystatechange(Optional); + DOM::ExceptionOr override_mime_type(String const& mime); + private: virtual void ref_event_target() override { ref(); } virtual void unref_event_target() override { unref(); } @@ -91,6 +94,9 @@ private: bool m_timed_out { false }; ByteBuffer m_response_object; + + // https://xhr.spec.whatwg.org/#override-mime-type + Optional m_override_mime_type; }; } diff --git a/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.idl b/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.idl index 9e1e0ec14c..df794fd04d 100644 --- a/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.idl +++ b/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.idl @@ -18,6 +18,7 @@ interface XMLHttpRequest : XMLHttpRequestEventTarget { ByteString? getResponseHeader(ByteString name); ByteString getAllResponseHeaders(); + undefined overrideMimeType(DOMString mime); attribute EventHandler onreadystatechange;