diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/modules/media_controls')
7 files changed, 59 insertions, 33 deletions
diff --git a/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_button_panel_element.cc b/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_button_panel_element.cc index a79e51741ff..7c21b9a4003 100644 --- a/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_button_panel_element.cc +++ b/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_button_panel_element.cc @@ -4,6 +4,7 @@ #include "third_party/blink/renderer/modules/media_controls/elements/media_control_button_panel_element.h" +#include "third_party/blink/renderer/modules/media_controls/elements/media_control_elements_helper.h" #include "third_party/blink/renderer/modules/media_controls/media_controls_impl.h" namespace blink { @@ -14,4 +15,8 @@ MediaControlButtonPanelElement::MediaControlButtonPanelElement( SetShadowPseudoId(AtomicString("-internal-media-controls-button-panel")); } +bool MediaControlButtonPanelElement::KeepEventInNode(Event* event) { + return MediaControlElementsHelper::IsUserInteractionEvent(event); +} + } // namespace blink diff --git a/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_button_panel_element.h b/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_button_panel_element.h index 460207cd939..d8bb310ffbe 100644 --- a/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_button_panel_element.h +++ b/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_button_panel_element.h @@ -18,6 +18,9 @@ class MediaControlsImpl; class MediaControlButtonPanelElement final : public MediaControlDivElement { public: explicit MediaControlButtonPanelElement(MediaControlsImpl&); + + private: + bool KeepEventInNode(Event*) override; }; } // namespace blink diff --git a/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_overlay_play_button_element.cc b/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_overlay_play_button_element.cc index e345cb06019..82d819a4482 100644 --- a/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_overlay_play_button_element.cc +++ b/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_overlay_play_button_element.cc @@ -215,31 +215,17 @@ void MediaControlOverlayPlayButtonElement::MaybeJump(int seconds) { } void MediaControlOverlayPlayButtonElement::DefaultEventHandler(Event* event) { - if (event->type() == EventTypeNames::click) { + if (ShouldCausePlayPause(event)) { + event->SetDefaultHandled(); + MaybePlayPause(); + } else if (event->type() == EventTypeNames::click) { event->SetDefaultHandled(); - // Double tap to navigate should only be available on modern controls. - if (!MediaControlsImpl::IsModern() || !event->IsMouseEvent()) { - MaybePlayPause(); - return; - } - - // If the event doesn't have position data we should just default to - // play/pause. - // TODO(beccahughes): Move to PointerEvent. + DCHECK(event->IsMouseEvent()); MouseEvent* mouse_event = ToMouseEvent(event); - if (!mouse_event->HasPosition()) { - MaybePlayPause(); - return; - } + DCHECK(mouse_event->HasPosition()); - // If the click happened on the internal button or a margin around it then - // we should play/pause. - if (IsPointInRect(*internal_button_->getBoundingClientRect(), - kInnerButtonTouchPaddingSize, mouse_event->clientX(), - mouse_event->clientY())) { - MaybePlayPause(); - } else if (!tap_timer_.IsActive()) { + if (!tap_timer_.IsActive()) { // If there was not a previous touch and this was outside of the button // then we should toggle visibility with a small unnoticeable delay in // case their is a second tap. @@ -274,14 +260,37 @@ void MediaControlOverlayPlayButtonElement::DefaultEventHandler(Event* event) { } tap_was_touch_event_.reset(); - event->SetDefaultHandled(); } } MediaControlInputElement::DefaultEventHandler(event); } bool MediaControlOverlayPlayButtonElement::KeepEventInNode(Event* event) { - return MediaControlElementsHelper::IsUserInteractionEvent(event); + return ShouldCausePlayPause(event); +} + +bool MediaControlOverlayPlayButtonElement::ShouldCausePlayPause( + Event* event) const { + // Only click events cause a play/pause. + if (event->type() != EventTypeNames::click) + return false; + + // Double tap to navigate should only be available on modern controls. + if (!MediaControlsImpl::IsModern() || !event->IsMouseEvent()) + return true; + + // If the event doesn't have position data we should just default to + // play/pause. + // TODO(beccahughes): Move to PointerEvent. + MouseEvent* mouse_event = ToMouseEvent(event); + if (!mouse_event->HasPosition()) + return true; + + // If the click happened on the internal button or a margin around it then + // we should play/pause. + return IsPointInRect(*internal_button_->getBoundingClientRect(), + kInnerButtonTouchPaddingSize, mouse_event->clientX(), + mouse_event->clientY()); } WebSize MediaControlOverlayPlayButtonElement::GetSizeOrDefault() const { diff --git a/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_overlay_play_button_element.h b/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_overlay_play_button_element.h index c37986b8c94..17d81918cb2 100644 --- a/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_overlay_play_button_element.h +++ b/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_overlay_play_button_element.h @@ -81,6 +81,7 @@ class MODULES_EXPORT MediaControlOverlayPlayButtonElement final void DefaultEventHandler(Event*) override; bool KeepEventInNode(Event*) override; + bool ShouldCausePlayPause(Event*) const; void MaybePlayPause(); void MaybeJump(int); diff --git a/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_panel_element.cc b/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_panel_element.cc index 91e142fa70c..8010bae15c4 100644 --- a/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_panel_element.cc +++ b/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_panel_element.cc @@ -134,7 +134,8 @@ void MediaControlPanelElement::DefaultEventHandler(Event* event) { } bool MediaControlPanelElement::KeepEventInNode(Event* event) { - return MediaControlElementsHelper::IsUserInteractionEvent(event); + return !MediaControlsImpl::IsModern() && + MediaControlElementsHelper::IsUserInteractionEvent(event); } void MediaControlPanelElement::DidBecomeVisible() { diff --git a/chromium/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc b/chromium/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc index 772ddeaa7d0..89c356e3e28 100644 --- a/chromium/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc +++ b/chromium/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc @@ -871,6 +871,7 @@ void MediaControlsImpl::MaybeShow() { timeline_->OnControlsShown(); UpdateCSSClassFromState(); + UpdateActingAsAudioControls(); } void MediaControlsImpl::Hide() { @@ -896,6 +897,7 @@ void MediaControlsImpl::Hide() { timeline_->OnControlsHidden(); UpdateCSSClassFromState(); + UpdateActingAsAudioControls(); } bool MediaControlsImpl::IsVisible() const { @@ -1603,13 +1605,7 @@ void MediaControlsImpl::OnLoadedMetadata() { // to be changed. Reset(); UpdateCSSClassFromState(); - - if (ShouldActAsAudioControls() != is_acting_as_audio_controls_) { - if (is_acting_as_audio_controls_) - StopActingAsAudioControls(); - else - StartActingAsAudioControls(); - } + UpdateActingAsAudioControls(); } void MediaControlsImpl::OnEnteredFullscreen() { @@ -1828,8 +1824,9 @@ MediaControlsImpl::ToggleClosedCaptions() { bool MediaControlsImpl::ShouldActAsAudioControls() const { // A video element should act like an audio element when it has an audio track // but no video track. - return IsModern() && MediaElement().IsHTMLVideoElement() && - MediaElement().HasAudio() && !MediaElement().HasVideo(); + return IsModern() && MediaElement().ShouldShowControls() && + MediaElement().IsHTMLVideoElement() && MediaElement().HasAudio() && + !MediaElement().HasVideo(); } void MediaControlsImpl::StartActingAsAudioControls() { @@ -1850,6 +1847,15 @@ void MediaControlsImpl::StopActingAsAudioControls() { Reset(); } +void MediaControlsImpl::UpdateActingAsAudioControls() { + if (ShouldActAsAudioControls() != is_acting_as_audio_controls_) { + if (is_acting_as_audio_controls_) + StopActingAsAudioControls(); + else + StartActingAsAudioControls(); + } +} + bool MediaControlsImpl::ShouldShowAudioControls() const { return IsModern() && (MediaElement().IsHTMLAudioElement() || is_acting_as_audio_controls_); diff --git a/chromium/third_party/blink/renderer/modules/media_controls/media_controls_impl.h b/chromium/third_party/blink/renderer/modules/media_controls/media_controls_impl.h index 555d6a1ffa3..6d801ad45e3 100644 --- a/chromium/third_party/blink/renderer/modules/media_controls/media_controls_impl.h +++ b/chromium/third_party/blink/renderer/modules/media_controls/media_controls_impl.h @@ -280,6 +280,7 @@ class MODULES_EXPORT MediaControlsImpl final : public HTMLDivElement, bool ShouldActAsAudioControls() const; void StartActingAsAudioControls(); void StopActingAsAudioControls(); + void UpdateActingAsAudioControls(); // Returns true/false based on which set of controls to display. bool ShouldShowAudioControls() const; |