Chromium Code Reviews| Index: content/renderer/render_widget.cc |
| diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc |
| index d9dbe21ce1cbb745540202a7b985521962c3e388..a4e0b0bebc5516925a958479b3da9e103ef6192a 100644 |
| --- a/content/renderer/render_widget.cc |
| +++ b/content/renderer/render_widget.cc |
| @@ -71,6 +71,7 @@ |
| #include "third_party/WebKit/public/web/WebRuntimeFeatures.h" |
| #include "third_party/WebKit/public/web/WebView.h" |
| #include "third_party/skia/include/core/SkShader.h" |
| +#include "ui/accessibility/ax_enums.h" |
| #include "ui/base/ui_base_switches.h" |
| #include "ui/gfx/frame_time.h" |
| #include "ui/gfx/geometry/point_conversions.h" |
| @@ -2193,12 +2194,31 @@ void RenderWidget::showUnhandledTapUIIfNeeded( |
| bool page_changed) { |
| DCHECK(handling_input_event_); |
| bool should_trigger = !page_changed && tapped_node.isTextNode() && |
| - !tapped_node.isContentEditable(); |
| + !tapped_node.isContentEditable() && |
| + !isInteractive(tapped_node); |
| if (should_trigger) { |
| Send(new ViewHostMsg_ShowUnhandledTapUIIfNeeded(routing_id_, |
| tapped_position.x, tapped_position.y)); |
| } |
| } |
| + |
| +bool RenderWidget::isInteractive(const WebNode& node) const { |
| + WebNode curNode = node; |
| + do { |
| + if (curNode.isFocusable()) |
|
dmazzoni
2015/01/30 07:34:20
This isn't going to work, because <body> is focusa
Donn Denman
2015/02/02 21:14:15
I'm surprised I didn't see this when testing it ou
dmazzoni
2015/02/02 21:19:52
I'm not sure I know a better way from the blink pu
|
| + return true; |
| + if (curNode.isElementNode()) { |
| + const blink::WebElement& element = curNode.toConst<blink::WebElement>(); |
| + blink::WebString role = element.getAttribute("role"); |
| + if (role.length() > 0) { |
|
dmazzoni
2015/01/30 07:34:20
nit: !role.isEmpty()
Donn Denman
2015/02/02 21:14:15
Done.
|
| + if (blink::WebAXObject::includesARIAWidgetRole(role)) |
| + return true; |
| + } |
| + } |
| + curNode = curNode.parentNode(); |
| + } while (!curNode.isNull()); |
| + return false; |
| +} |
| #endif |
| void RenderWidget::didHandleGestureEvent( |