Changeset 150687 in webkit


Ignore:
Timestamp:
May 25, 2013 5:02:35 AM (11 years ago)
Author:
akling@apple.com
Message:

Move Node::isKeyboardFocusable() to Element.
<http://webkit.org/b/116761>

Reviewed by Antti Koivisto.

Only Elements can be keyboard-focusable. Move the base isKeyboardFocusable() implementation to Element
and sprinkle OVERRIDE on subclass overrides.
FocusController gets some temporary type checks that will go away as that code moves to dealing in
Elements instead of Node.

  • dom/Node.h:
  • dom/Node.cpp:
  • dom/Element.h:
  • dom/Element.cpp:

(WebCore::Element::isKeyboardFocusable):

Move isKeyboardFocusable() from Node to Element.

  • page/FocusController.cpp:

(WebCore::isNonFocusableShadowHost):
(WebCore::isFocusableShadowHost):
(WebCore::shouldVisit):
(WebCore::FocusController::advanceFocusInDocumentOrder):

Check that the inspected Node is an Element before querying isKeyboardFocusable().

  • html/HTMLAnchorElement.h:
  • html/HTMLAreaElement.h:
  • html/HTMLFormControlElement.h:
  • html/HTMLFrameOwnerElement.h:
  • html/HTMLInputElement.h:
  • html/HTMLPlugInElement.h:
  • html/HTMLSelectElement.h:
  • html/HTMLTextAreaElement.h:
  • svg/SVGAElement.h:
  • svg/SVGStyledElement.h:

Sprinkle OVERRIDE.

Location:
trunk/Source/WebCore
Files:
16 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r150686 r150687  
     12013-05-25  Andreas Kling  <akling@apple.com>
     2
     3        Move Node::isKeyboardFocusable() to Element.
     4        <http://webkit.org/b/116761>
     5
     6        Reviewed by Antti Koivisto.
     7
     8        Only Elements can be keyboard-focusable. Move the base isKeyboardFocusable() implementation to Element
     9        and sprinkle OVERRIDE on subclass overrides.
     10        FocusController gets some temporary type checks that will go away as that code moves to dealing in
     11        Elements instead of Node.
     12
     13        * dom/Node.h:
     14        * dom/Node.cpp:
     15        * dom/Element.h:
     16        * dom/Element.cpp:
     17        (WebCore::Element::isKeyboardFocusable):
     18
     19            Move isKeyboardFocusable() from Node to Element.
     20
     21        * page/FocusController.cpp:
     22        (WebCore::isNonFocusableShadowHost):
     23        (WebCore::isFocusableShadowHost):
     24        (WebCore::shouldVisit):
     25        (WebCore::FocusController::advanceFocusInDocumentOrder):
     26
     27            Check that the inspected Node is an Element before querying isKeyboardFocusable().
     28
     29        * html/HTMLAnchorElement.h:
     30        * html/HTMLAreaElement.h:
     31        * html/HTMLFormControlElement.h:
     32        * html/HTMLFrameOwnerElement.h:
     33        * html/HTMLInputElement.h:
     34        * html/HTMLPlugInElement.h:
     35        * html/HTMLSelectElement.h:
     36        * html/HTMLTextAreaElement.h:
     37        * svg/SVGAElement.h:
     38        * svg/SVGStyledElement.h:
     39
     40            Sprinkle OVERRIDE.
     41
    1422013-05-25  Andreas Kling  <akling@apple.com>
    243
  • trunk/Source/WebCore/dom/Element.cpp

    r150686 r150687  
    250250}
    251251
     252bool Element::isKeyboardFocusable(KeyboardEvent*) const
     253{
     254    return isFocusable() && tabIndex() >= 0;
     255}
     256
    252257DEFINE_VIRTUAL_ATTRIBUTE_EVENT_LISTENER(Element, blur);
    253258DEFINE_VIRTUAL_ATTRIBUTE_EVENT_LISTENER(Element, error);
  • trunk/Source/WebCore/dom/Element.h

    r150686 r150687  
    433433    virtual void setFocus(bool flag);
    434434
     435    virtual bool isKeyboardFocusable(KeyboardEvent*) const;
     436
    435437    RenderStyle* computedStyle(PseudoId = NOPSEUDO);
    436438
  • trunk/Source/WebCore/dom/Node.cpp

    r150686 r150687  
    886886}
    887887
    888 bool Node::isKeyboardFocusable(KeyboardEvent*) const
    889 {
    890     return isFocusable() && tabIndex() >= 0;
    891 }
    892 
    893888bool Node::isMouseFocusable() const
    894889{
  • trunk/Source/WebCore/dom/Node.h

    r150686 r150687  
    407407    // Whether the node can actually be focused.
    408408    virtual bool isFocusable() const;
    409     virtual bool isKeyboardFocusable(KeyboardEvent*) const;
    410409    virtual bool isMouseFocusable() const;
    411410    virtual Node* focusDelegate();
  • trunk/Source/WebCore/html/HTMLAnchorElement.h

    r135069 r150687  
    111111    virtual bool supportsFocus() const;
    112112    virtual bool isMouseFocusable() const;
    113     virtual bool isKeyboardFocusable(KeyboardEvent*) const;
     113    virtual bool isKeyboardFocusable(KeyboardEvent*) const OVERRIDE;
    114114    virtual void defaultEventHandler(Event*);
    115115    virtual void setActive(bool active = true, bool pause = false);
  • trunk/Source/WebCore/html/HTMLAreaElement.h

    r149960 r150687  
    5454    virtual bool supportsFocus() const;
    5555    virtual String target() const;
    56     virtual bool isKeyboardFocusable(KeyboardEvent*) const;
     56    virtual bool isKeyboardFocusable(KeyboardEvent*) const OVERRIDE;
    5757    virtual bool isMouseFocusable() const;
    5858    virtual bool isFocusable() const;
  • trunk/Source/WebCore/html/HTMLFormControlElement.h

    r148921 r150687  
    117117
    118118    virtual bool supportsFocus() const;
    119     virtual bool isKeyboardFocusable(KeyboardEvent*) const;
     119    virtual bool isKeyboardFocusable(KeyboardEvent*) const OVERRIDE;
    120120    virtual bool isMouseFocusable() const;
    121121
  • trunk/Source/WebCore/html/HTMLFrameOwnerElement.h

    r141524 r150687  
    6666
    6767private:
    68     virtual bool isKeyboardFocusable(KeyboardEvent*) const;
     68    virtual bool isKeyboardFocusable(KeyboardEvent*) const OVERRIDE;
    6969    virtual bool isFrameOwnerElement() const OVERRIDE { return true; }
    7070
  • trunk/Source/WebCore/html/HTMLInputElement.h

    r148921 r150687  
    324324
    325325    virtual bool hasCustomFocusLogic() const OVERRIDE;
    326     virtual bool isKeyboardFocusable(KeyboardEvent*) const;
     326    virtual bool isKeyboardFocusable(KeyboardEvent*) const OVERRIDE;
    327327    virtual bool isMouseFocusable() const;
    328328    virtual bool isEnumeratable() const;
  • trunk/Source/WebCore/html/HTMLPlugInElement.h

    r149871 r150687  
    106106    virtual bool supportsFocus() const OVERRIDE;
    107107
    108     virtual bool isKeyboardFocusable(KeyboardEvent*) const;
     108    virtual bool isKeyboardFocusable(KeyboardEvent*) const OVERRIDE;
    109109    virtual bool isPluginElement() const;
    110110
  • trunk/Source/WebCore/html/HTMLSelectElement.h

    r145399 r150687  
    112112    virtual const AtomicString& formControlType() const;
    113113   
    114     virtual bool isKeyboardFocusable(KeyboardEvent*) const;
     114    virtual bool isKeyboardFocusable(KeyboardEvent*) const OVERRIDE;
    115115    virtual bool isMouseFocusable() const;
    116116
  • trunk/Source/WebCore/html/HTMLTextAreaElement.h

    r149960 r150687  
    106106    virtual bool hasCustomFocusLogic() const OVERRIDE;
    107107    virtual bool isMouseFocusable() const;
    108     virtual bool isKeyboardFocusable(KeyboardEvent*) const;
     108    virtual bool isKeyboardFocusable(KeyboardEvent*) const OVERRIDE;
    109109    virtual void updateFocusAppearance(bool restorePreviousSelection);
    110110
  • trunk/Source/WebCore/page/FocusController.cpp

    r150214 r150687  
    138138{
    139139    ASSERT(node);
    140     return !node->isKeyboardFocusable(event) && isShadowHost(node) && !hasCustomFocusLogic(node);
     140    return node->isElementNode() && !toElement(node)->isKeyboardFocusable(event) && isShadowHost(node) && !hasCustomFocusLogic(node);
    141141}
    142142
     
    144144{
    145145    ASSERT(node);
    146     return node->isKeyboardFocusable(event) && isShadowHost(node) && !hasCustomFocusLogic(node);
     146    return node->isElementNode() && toElement(node)->isKeyboardFocusable(event) && isShadowHost(node) && !hasCustomFocusLogic(node);
    147147}
    148148
     
    156156{
    157157    ASSERT(node);
    158     return node->isKeyboardFocusable(event) || isNonFocusableShadowHost(node, event);
     158    return (node->isElementNode() && toElement(node)->isKeyboardFocusable(event)) || isNonFocusableShadowHost(node, event);
    159159}
    160160
     
    321321        return false;
    322322
    323     if (node->isFrameOwnerElement() && (!node->isPluginElement() || !node->isKeyboardFocusable(event))) {
     323    Element* element = toElement(node.get());
     324
     325    if (element->isFrameOwnerElement() && (!element->isPluginElement() || !element->isKeyboardFocusable(event))) {
    324326        // We focus frames rather than frame owners.
    325327        // FIXME: We should not focus frames that have no scrollbars, as focusing them isn't useful to the user.
    326         HTMLFrameOwnerElement* owner = static_cast<HTMLFrameOwnerElement*>(node.get());
     328        HTMLFrameOwnerElement* owner = toFrameOwnerElement(element);
    327329        if (!owner->contentFrame())
    328330            return false;
  • trunk/Source/WebCore/svg/SVGAElement.h

    r149960 r150687  
    5959    virtual bool supportsFocus() const;
    6060    virtual bool isMouseFocusable() const;
    61     virtual bool isKeyboardFocusable(KeyboardEvent*) const;
     61    virtual bool isKeyboardFocusable(KeyboardEvent*) const OVERRIDE;
    6262    virtual bool isFocusable() const;
    6363    virtual bool isURLAttribute(const Attribute&) const;
  • trunk/Source/WebCore/svg/SVGStyledElement.h

    r149960 r150687  
    8181    virtual bool isSVGStyledElement() const OVERRIDE FINAL { return true; }
    8282
    83     virtual bool isKeyboardFocusable(KeyboardEvent*) const;
     83    virtual bool isKeyboardFocusable(KeyboardEvent*) const OVERRIDE;
    8484    virtual bool isMouseFocusable() const;
    8585
Note: See TracChangeset for help on using the changeset viewer.