summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/blink/renderer/core/dom
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/core/dom')
-rw-r--r--chromium/third_party/blink/renderer/core/dom/element.cc15
-rw-r--r--chromium/third_party/blink/renderer/core/dom/events/event_dispatcher.cc12
2 files changed, 27 insertions, 0 deletions
diff --git a/chromium/third_party/blink/renderer/core/dom/element.cc b/chromium/third_party/blink/renderer/core/dom/element.cc
index d86329b115a..e5df6bbfc6a 100644
--- a/chromium/third_party/blink/renderer/core/dom/element.cc
+++ b/chromium/third_party/blink/renderer/core/dom/element.cc
@@ -3491,11 +3491,26 @@ bool Element::SupportsSpatialNavigationFocus() const {
// events).
if (!IsSpatialNavigationEnabled(GetDocument().GetFrame()))
return false;
+
+ if (!GetLayoutObject())
+ return false;
+
if (HasEventListeners(event_type_names::kClick) ||
HasEventListeners(event_type_names::kKeydown) ||
HasEventListeners(event_type_names::kKeypress) ||
HasEventListeners(event_type_names::kKeyup))
return true;
+
+ // Some web apps use click-handlers to react on clicks within rects that are
+ // styled with {cursor: pointer}. Such rects *look* clickable so they probably
+ // are. Here we make Hand-trees' tip, the first (biggest) node with {cursor:
+ // pointer}, navigable because users shouldn't need to navigate through every
+ // sub element that inherit this CSS.
+ if (GetComputedStyle()->Cursor() == ECursor::kPointer &&
+ ParentComputedStyle()->Cursor() != ECursor::kPointer) {
+ return true;
+ }
+
if (!IsSVGElement())
return false;
return (HasEventListeners(event_type_names::kFocus) ||
diff --git a/chromium/third_party/blink/renderer/core/dom/events/event_dispatcher.cc b/chromium/third_party/blink/renderer/core/dom/events/event_dispatcher.cc
index 3b6dab593bd..8f3eaf84d00 100644
--- a/chromium/third_party/blink/renderer/core/dom/events/event_dispatcher.cc
+++ b/chromium/third_party/blink/renderer/core/dom/events/event_dispatcher.cc
@@ -36,6 +36,7 @@
#include "third_party/blink/renderer/core/dom/events/event_path.h"
#include "third_party/blink/renderer/core/dom/events/scoped_event_queue.h"
#include "third_party/blink/renderer/core/dom/events/window_event_context.h"
+#include "third_party/blink/renderer/core/events/keyboard_event.h"
#include "third_party/blink/renderer/core/events/mouse_event.h"
#include "third_party/blink/renderer/core/frame/ad_tracker.h"
#include "third_party/blink/renderer/core/frame/deprecation.h"
@@ -45,6 +46,8 @@
#include "third_party/blink/renderer/core/frame/use_counter.h"
#include "third_party/blink/renderer/core/html/html_element.h"
#include "third_party/blink/renderer/core/inspector/inspector_trace_events.h"
+#include "third_party/blink/renderer/core/page/page.h"
+#include "third_party/blink/renderer/core/page/spatial_navigation_controller.h"
#include "third_party/blink/renderer/core/timing/event_timing.h"
#include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h"
@@ -370,6 +373,15 @@ inline void EventDispatcher::DispatchEventPostProcess(
}
}
+ if (Page* page = node_->GetDocument().GetPage()) {
+ if (page->GetSettings().GetSpatialNavigationEnabled() &&
+ is_trusted_or_click && event_->IsKeyboardEvent() &&
+ ToKeyboardEvent(*event_).key() == "Enter" &&
+ event_->type() == event_type_names::kKeyup) {
+ page->GetSpatialNavigationController().ResetEnterKeyState();
+ }
+ }
+
// Track the usage of sending a mousedown event to a select element to force
// it to open. This measures a possible breakage of not allowing untrusted
// events to open select boxes.