diff --git a/Userland/Libraries/LibWeb/HTML/AudioTrack.cpp b/Userland/Libraries/LibWeb/HTML/AudioTrack.cpp
index 6ec2a531f50..b2491494b1f 100644
--- a/Userland/Libraries/LibWeb/HTML/AudioTrack.cpp
+++ b/Userland/Libraries/LibWeb/HTML/AudioTrack.cpp
@@ -37,6 +37,10 @@ AudioTrack::AudioTrack(JS::Realm& realm, JS::NonnullGCPtr medi
auto playback_position = static_cast(position.to_milliseconds()) / 1000.0;
m_media_element->set_current_playback_position(playback_position);
};
+
+ m_audio_plugin->on_decoder_error = [this](String error_message) {
+ m_media_element->set_decoder_error(error_message).release_value_but_fixme_should_propagate_errors();
+ };
}
AudioTrack::~AudioTrack()
diff --git a/Userland/Libraries/LibWeb/Platform/AudioCodecPlugin.h b/Userland/Libraries/LibWeb/Platform/AudioCodecPlugin.h
index 4e6b2996493..7cf0a540347 100644
--- a/Userland/Libraries/LibWeb/Platform/AudioCodecPlugin.h
+++ b/Userland/Libraries/LibWeb/Platform/AudioCodecPlugin.h
@@ -35,6 +35,7 @@ public:
virtual Duration duration() = 0;
Function on_playback_position_updated;
+ Function on_decoder_error;
protected:
AudioCodecPlugin();
diff --git a/Userland/Libraries/LibWeb/Platform/AudioCodecPluginAgnostic.cpp b/Userland/Libraries/LibWeb/Platform/AudioCodecPluginAgnostic.cpp
index 0f50d1b9966..e0cd413bb4d 100644
--- a/Userland/Libraries/LibWeb/Platform/AudioCodecPluginAgnostic.cpp
+++ b/Userland/Libraries/LibWeb/Platform/AudioCodecPluginAgnostic.cpp
@@ -43,8 +43,17 @@ ErrorOr> AudioCodecPluginAgnostic::creat
Audio::OutputState::Suspended, loader->sample_rate(), /* channels = */ 2, latency_ms,
[&plugin = *plugin, loader](Bytes buffer, Audio::PcmSampleFormat format, size_t sample_count) -> ReadonlyBytes {
VERIFY(format == Audio::PcmSampleFormat::Float32);
- auto samples = loader->get_more_samples(sample_count).release_value_but_fixme_should_propagate_errors();
+
+ auto samples_result = loader->get_more_samples(sample_count);
+
+ if (samples_result.is_error()) {
+ plugin.on_decoder_error(MUST(String::formatted("Decoding failure: {}", samples_result.error())));
+ return buffer.trim(0);
+ }
+
+ auto samples = samples_result.release_value();
VERIFY(samples.size() <= sample_count);
+
FixedMemoryStream writing_stream { buffer };
for (auto& sample : samples) {