summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_overlay_play_button_element.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_overlay_play_button_element.cc')
-rw-r--r--chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_overlay_play_button_element.cc38
1 files changed, 29 insertions, 9 deletions
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 82d819a4482..f65966ea56b 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
@@ -8,6 +8,7 @@
#include "third_party/blink/public/platform/task_type.h"
#include "third_party/blink/public/platform/web_size.h"
#include "third_party/blink/renderer/core/dom/events/event.h"
+#include "third_party/blink/renderer/core/dom/node_computed_style.h"
#include "third_party/blink/renderer/core/dom/shadow_root.h"
#include "third_party/blink/renderer/core/events/mouse_event.h"
#include "third_party/blink/renderer/core/geometry/dom_rect.h"
@@ -15,6 +16,7 @@
#include "third_party/blink/renderer/core/html/media/html_media_element.h"
#include "third_party/blink/renderer/core/html/media/html_media_source.h"
#include "third_party/blink/renderer/core/input_type_names.h"
+#include "third_party/blink/renderer/core/layout/layout_view.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"
#include "third_party/blink/renderer/modules/media_controls/media_controls_resource_loader.h"
@@ -266,7 +268,15 @@ void MediaControlOverlayPlayButtonElement::DefaultEventHandler(Event* event) {
}
bool MediaControlOverlayPlayButtonElement::KeepEventInNode(Event* event) {
- return ShouldCausePlayPause(event);
+ // We only care about user interaction events.
+ if (!MediaControlElementsHelper::IsUserInteractionEvent(event))
+ return false;
+
+ // For mouse events, only keep in node if they're on the internal button.
+ if (event->IsMouseEvent() && MediaControlsImpl::IsModern())
+ return IsMouseEventOnInternalButton(ToMouseEvent(event));
+
+ return true;
}
bool MediaControlOverlayPlayButtonElement::ShouldCausePlayPause(
@@ -279,18 +289,28 @@ bool MediaControlOverlayPlayButtonElement::ShouldCausePlayPause(
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);
+ return IsMouseEventOnInternalButton(ToMouseEvent(event));
+}
+
+bool MediaControlOverlayPlayButtonElement::IsMouseEventOnInternalButton(
+ MouseEvent* mouse_event) const {
+ // If no position data available, default to yes.
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());
+ // Find the zoom-adjusted internal button bounding box.
+ DOMRect* box = internal_button_->getBoundingClientRect();
+ float zoom = ComputedStyleRef().EffectiveZoom() /
+ GetDocument().GetLayoutView()->ZoomFactor();
+ box->setX(box->x() * zoom);
+ box->setY(box->y() * zoom);
+ box->setWidth(box->width() * zoom);
+ box->setHeight(box->height() * zoom);
+
+ // Check the button and a margin around it.
+ return IsPointInRect(*box, kInnerButtonTouchPaddingSize,
+ mouse_event->clientX(), mouse_event->clientY());
}
WebSize MediaControlOverlayPlayButtonElement::GetSizeOrDefault() const {