+static bool isClickableOrFocusable(Node* focusableNode)
+{
+
+ if (!focusableNode)
+ return false;
+ if (focusableNode->disabled())
+ return false;
+ if (!focusableNode->inDocument())
+ return false;
+ if (!focusableNode->renderer() || focusableNode->renderer()->style()->visibility() != VISIBLE)
+ return false;
+ if (focusableNode->isFocusable()) {
+ if (focusableNode->isLink()
+ || focusableNode->hasTagName(HTMLNames::inputTag)
+ || focusableNode->hasTagName(HTMLNames::selectTag)
+ || focusableNode->hasTagName(HTMLNames::buttonTag))
+ return true;
+ }
+ if (focusableNode->supportsFocus()
+ || focusableNode->hasEventListeners(eventNames().clickEvent)
+ || focusableNode->hasEventListeners(eventNames().mousedownEvent)
+ || focusableNode->hasEventListeners(eventNames().mouseupEvent)) {
+ return true;
+ }
+ return false;
+}
+