Changeset 34626 in webkit


Ignore:
Timestamp:
Jun 17, 2008 11:45:06 AM (16 years ago)
Author:
adele@apple.com
Message:

WebCore:

2008-06-17 Michelangelo De Simone <m.des@mac.com>

Reviewed by Adele.


Fix for https://bugs.webkit.org/show_bug.cgi?id=18887
Added support for autofocus controls.

When authors specify the "autofocus" attribute on form controls these
acquire focus automatically as the document is rendered.

Tests: fast/forms/autofocus-attribute.html

fast/forms/autofocus-opera-001.html
fast/forms/autofocus-opera-002.html
fast/forms/autofocus-opera-003.html
fast/forms/autofocus-opera-004.html
fast/forms/autofocus-opera-005.html
fast/forms/autofocus-opera-006.html
fast/forms/autofocus-opera-007.html
fast/forms/autofocus-opera-008.html

  • dom/Document.cpp: (WebCore::Document::Document): Initialize the flag to ignore autofocus.
  • dom/Document.h:
  • html/HTMLAttributeNames.in:
  • html/HTMLButtonElement.idl:
  • html/HTMLFormControlElement.cpp: (WebCore::HTMLFormControlElement::attach): Sets focus onto the appropriate "autofocus" control (WebCore::HTMLFormControlElement::autofocus): Autofocus attribute getter (WebCore::HTMLFormControlElement::setAutofocus): Autofocus attribute setter
  • html/HTMLFormControlElement.h:
  • html/HTMLInputElement.idl:
  • html/HTMLSelectElement.idl:
  • html/HTMLTextAreaElement.idl:
  • rendering/RenderTextControl.cpp: (WebCore::RenderTextControl::setUserEdited): Sets the "ignore autofocus" flag on document if the user edited the control.
  • rendering/RenderTextControl.h:

LayoutTests:

2008-06-17 Michelangelo De Simone <m.des@mac.com>

Reviewed by Adele.

Tests for https://bugs.webkit.org/show_bug.cgi?id=18887
Added support for autofocus controls.

Test cases "autofocus-opera*" have been imported from the Opera test suite
originally located at:
http://tc.labs.opera.com/html/forms/input/common-attributes/autofocus/


  • fast/dom/domListEnumeration-expected.txt:
  • fast/dom/resources/domListEnumeration.js:
  • fast/forms/autofocus-attribute-expected.txt: Added.
  • fast/forms/autofocus-attribute.html: Added.
  • fast/forms/autofocus-opera-001-expected.txt: Added.
  • fast/forms/autofocus-opera-001.html: Added.
  • fast/forms/autofocus-opera-002-expected.txt: Added.
  • fast/forms/autofocus-opera-002.html: Added.
  • fast/forms/autofocus-opera-003-expected.txt: Added.
  • fast/forms/autofocus-opera-003.html: Added.
  • fast/forms/autofocus-opera-004-expected.txt: Added.
  • fast/forms/autofocus-opera-004.html: Added.
  • fast/forms/autofocus-opera-005-expected.txt: Added.
  • fast/forms/autofocus-opera-005.html: Added.
  • fast/forms/autofocus-opera-006-expected.txt: Added.
  • fast/forms/autofocus-opera-006.html: Added.
  • fast/forms/autofocus-opera-007-expected.txt: Added.
  • fast/forms/autofocus-opera-007.html: Added.
  • fast/forms/autofocus-opera-008-expected.txt: Added.
  • fast/forms/autofocus-opera-008.html: Added.
Location:
trunk
Files:
18 added
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r34614 r34626  
     12008-06-17  Michelangelo De Simone  <m.des@mac.com>
     2
     3        Reviewed by Adele.
     4
     5        Tests for https://bugs.webkit.org/show_bug.cgi?id=18887
     6        Added support for autofocus controls.
     7
     8        Test cases "autofocus-opera*" have been imported from the Opera test suite
     9        originally located at:
     10        http://tc.labs.opera.com/html/forms/input/common-attributes/autofocus/
     11       
     12        * fast/dom/domListEnumeration-expected.txt:
     13        * fast/dom/resources/domListEnumeration.js:
     14        * fast/forms/autofocus-attribute-expected.txt: Added.
     15        * fast/forms/autofocus-attribute.html: Added.
     16        * fast/forms/autofocus-opera-001-expected.txt: Added.
     17        * fast/forms/autofocus-opera-001.html: Added.
     18        * fast/forms/autofocus-opera-002-expected.txt: Added.
     19        * fast/forms/autofocus-opera-002.html: Added.
     20        * fast/forms/autofocus-opera-003-expected.txt: Added.
     21        * fast/forms/autofocus-opera-003.html: Added.
     22        * fast/forms/autofocus-opera-004-expected.txt: Added.
     23        * fast/forms/autofocus-opera-004.html: Added.
     24        * fast/forms/autofocus-opera-005-expected.txt: Added.
     25        * fast/forms/autofocus-opera-005.html: Added.
     26        * fast/forms/autofocus-opera-006-expected.txt: Added.
     27        * fast/forms/autofocus-opera-006.html: Added.
     28        * fast/forms/autofocus-opera-007-expected.txt: Added.
     29        * fast/forms/autofocus-opera-007.html: Added.
     30        * fast/forms/autofocus-opera-008-expected.txt: Added.
     31        * fast/forms/autofocus-opera-008.html: Added.
     32
    1332008-06-16  Dan Bernstein  <mitz@apple.com>
    234
  • trunk/LayoutTests/fast/dom/domListEnumeration-expected.txt

    r34543 r34626  
    4242
    4343[object HTMLSelectElement]
    44 PASS resultArray.length is 124
     44PASS resultArray.length is 125
    4545PASS resultArray[0].i is '0'
    4646PASS resultArray[0].item is document.getElementsByTagName('option')[0]
  • trunk/LayoutTests/fast/dom/resources/domListEnumeration.js

    r34543 r34626  
    142142var htmlSelectElement = document.getElementsByTagName('select')[0];
    143143resultArray = iterateList(htmlSelectElement);
    144 shouldBe("resultArray.length", "124");
     144shouldBe("resultArray.length", "125");
    145145shouldBe("resultArray[0].i", "'0'");
    146146shouldBe("resultArray[0].item", "document.getElementsByTagName('option')[0]");
  • trunk/WebCore/ChangeLog

    r34625 r34626  
     12008-06-17  Michelangelo De Simone  <m.des@mac.com>
     2
     3        Reviewed by Adele.
     4       
     5        Fix for https://bugs.webkit.org/show_bug.cgi?id=18887
     6        Added support for autofocus controls.
     7
     8        When authors specify the "autofocus" attribute on form controls these
     9        acquire focus automatically as the document is rendered.
     10
     11        Tests: fast/forms/autofocus-attribute.html
     12               fast/forms/autofocus-opera-001.html
     13               fast/forms/autofocus-opera-002.html
     14               fast/forms/autofocus-opera-003.html
     15               fast/forms/autofocus-opera-004.html
     16               fast/forms/autofocus-opera-005.html
     17               fast/forms/autofocus-opera-006.html
     18               fast/forms/autofocus-opera-007.html
     19               fast/forms/autofocus-opera-008.html
     20
     21        * dom/Document.cpp: (WebCore::Document::Document): Initialize the flag to ignore autofocus.
     22        * dom/Document.h:
     23        * html/HTMLAttributeNames.in:
     24        * html/HTMLButtonElement.idl:
     25        * html/HTMLFormControlElement.cpp:
     26        (WebCore::HTMLFormControlElement::attach): Sets focus onto the appropriate "autofocus" control
     27        (WebCore::HTMLFormControlElement::autofocus): Autofocus attribute getter
     28        (WebCore::HTMLFormControlElement::setAutofocus): Autofocus attribute setter
     29        * html/HTMLFormControlElement.h:
     30        * html/HTMLInputElement.idl:
     31        * html/HTMLSelectElement.idl:
     32        * html/HTMLTextAreaElement.idl:
     33        * rendering/RenderTextControl.cpp: (WebCore::RenderTextControl::setUserEdited):
     34          Sets the "ignore autofocus" flag on document if the user edited the control.
     35        * rendering/RenderTextControl.h:
     36
    1372008-06-17  Alp Toker  <alp@nuanti.com>
    238
  • trunk/WebCore/dom/Document.cpp

    r34589 r34626  
    303303
    304304    m_printing = false;
     305   
     306    m_ignoreAutofocus = false;
    305307
    306308    m_frame = frame;
  • trunk/WebCore/dom/Document.h

    r34584 r34626  
    483483    Node* focusedNode() const { return m_focusedNode.get(); }
    484484
     485    // The m_ignoreAutofocus flag specifies whether or not the document has been changed by the user enough
     486    // for WebCore to ignore the autofocus attribute on any form controls
     487    bool ignoreAutofocus() const { return m_ignoreAutofocus; };
     488    void setIgnoreAutofocus(bool shouldIgnore = true) { m_ignoreAutofocus = shouldIgnore; };
     489
    485490    void setHoverNode(PassRefPtr<Node>);
    486491    Node* hoverNode() const { return m_hoverNode.get(); }
     
    806811
    807812    bool m_printing;
     813   
     814    bool m_ignoreAutofocus;
    808815
    809816    ParseMode m_parseMode;
  • trunk/WebCore/html/HTMLAttributeNames.in

    r34484 r34626  
    2020<aria-valuenow/>
    2121<autocomplete/>
     22<autofocus/>
    2223<autoplay/>
    2324<autosave/>
  • trunk/WebCore/html/HTMLButtonElement.idl

    r32664 r34626  
    2929                 attribute  [ConvertNullToNullString] DOMString            accessKey;
    3030                 attribute  boolean              disabled;
     31                 attribute  boolean              autofocus;
    3132                 attribute  [ConvertNullToNullString] DOMString            name;
    3233        readonly attribute  DOMString            type;
  • trunk/WebCore/html/HTMLFormControlElement.cpp

    r34559 r34626  
    9797    if (renderer())
    9898        renderer()->updateFromElement();
     99       
     100    // Focus the element if it should honour its autofocus attribute.
     101    // We have to determine if the element is a TextArea/Input/Button/Select,
     102    // if input type hidden ignore autofocus. So if disabled or readonly.
     103    if (autofocus() && renderer() && !document()->ignoreAutofocus() && !isReadOnlyControl() &&
     104            ((hasTagName(inputTag) && !isInputTypeHidden()) || hasTagName(selectTag) ||
     105              hasTagName(buttonTag) || hasTagName(textareaTag)))
     106         focus();
    99107}
    100108
     
    172180}
    173181
     182bool HTMLFormControlElement::autofocus() const
     183{
     184    return hasAttribute(autofocusAttr);
     185}
     186
     187void HTMLFormControlElement::setAutofocus(bool b)
     188{
     189    setAttribute(autofocusAttr, b ? "autofocus" : 0);
     190}
     191
    174192void HTMLFormControlElement::recalcStyle(StyleChange change)
    175193{
  • trunk/WebCore/html/HTMLFormControlElement.h

    r34559 r34626  
    7171    void setReadOnly(bool);
    7272
     73    // Determines whether or not a control will be automatically focused
     74    virtual bool autofocus() const;
     75    void setAutofocus(bool);
     76
    7377    virtual void recalcStyle(StyleChange);
    7478
  • trunk/WebCore/html/HTMLInputElement.idl

    r32664 r34626  
    3636                 attribute boolean         checked;
    3737                 attribute boolean         disabled;
     38                 attribute boolean         autofocus;
    3839                 attribute long            maxLength;
    3940                 attribute [ConvertNullToNullString] DOMString name;
  • trunk/WebCore/html/HTMLSelectElement.idl

    r32664 r34626  
    4747
    4848                 attribute boolean         disabled;
     49                 attribute boolean         autofocus;
    4950                 attribute boolean         multiple;
    5051                 attribute [ConvertNullToNullString] DOMString       name;
  • trunk/WebCore/html/HTMLTextAreaElement.idl

    r32664 r34626  
    3131                 attribute  long                 cols;
    3232                 attribute  boolean              disabled;
     33                 attribute  boolean              autofocus;
    3334                 attribute  [ConvertNullToNullString] DOMString            name;
    3435                 attribute  boolean              readOnly;
  • trunk/WebCore/rendering/RenderTextControl.cpp

    r34589 r34626  
    414414    if (m_searchPopupIsVisible)
    415415        m_searchPopup->updateFromElement();
     416}
     417
     418void RenderTextControl::setUserEdited(bool isUserEdited)
     419{
     420    m_userEdited = isUserEdited;
     421    document()->setIgnoreAutofocus(isUserEdited);
    416422}
    417423
  • trunk/WebCore/rendering/RenderTextControl.h

    r28240 r34626  
    6363   
    6464    bool isUserEdited() const { return m_userEdited; }
    65     void setUserEdited(bool isUserEdited) { m_userEdited = isUserEdited; }
     65    void setUserEdited(bool isUserEdited);
    6666
    6767    int selectionStart();
Note: See TracChangeset for help on using the changeset viewer.