diff --git a/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.cpp index b8168dc04f..3f464e8e38 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.cpp +++ b/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.cpp @@ -303,6 +303,9 @@ void HTMLMediaElement::set_duration(double duration) } m_duration = duration; + + if (auto* layout_node = this->layout_node()) + layout_node->set_needs_display(); } WebIDL::ExceptionOr> HTMLMediaElement::play() diff --git a/Userland/Libraries/LibWeb/Painting/MediaPaintable.cpp b/Userland/Libraries/LibWeb/Painting/MediaPaintable.cpp index 73cc0ca95c..a3c99133c8 100644 --- a/Userland/Libraries/LibWeb/Painting/MediaPaintable.cpp +++ b/Userland/Libraries/LibWeb/Painting/MediaPaintable.cpp @@ -132,7 +132,7 @@ DevicePixelRect MediaPaintable::paint_control_bar_timeline(PaintContext& context timeline_rect.set_width(min(control_box_rect.width() * 6 / 10, timeline_rect.width())); media_element.cached_layout_boxes({}).timeline_rect = context.scale_to_css_rect(timeline_rect); - auto playback_percentage = media_element.current_time() / media_element.duration(); + auto playback_percentage = isnan(media_element.duration()) ? 0.0 : media_element.current_time() / media_element.duration(); auto playback_position = static_cast(static_cast(timeline_rect.width())) * playback_percentage; auto timeline_button_size = min(maximum_timeline_button_size, timeline_rect.height() / 2); @@ -166,7 +166,8 @@ DevicePixelRect MediaPaintable::paint_control_bar_timeline(PaintContext& context DevicePixelRect MediaPaintable::paint_control_bar_timestamp(PaintContext& context, HTML::HTMLMediaElement const& media_element, DevicePixelRect control_box_rect) const { auto current_time = human_readable_digital_time(round(media_element.current_time())); - auto duration = human_readable_digital_time(round(media_element.duration())); + auto duration = human_readable_digital_time(isnan(media_element.duration()) ? 0 : round(media_element.duration())); + auto timestamp = String::formatted("{} / {}", current_time, duration).release_value_but_fixme_should_propagate_errors(); auto const& scaled_font = layout_node().scaled_font(context);