Changeset 85680 in webkit


Ignore:
Timestamp:
May 3, 2011 4:08:21 PM (13 years ago)
Author:
rolandsteiner@chromium.org
Message:

2011-05-03 Roland Steiner <rolandsteiner@chromium.org>

Reviewed by Dimitri Glazkov.

Allow access keys to be used in shadow DOM
https://bugs.webkit.org/show_bug.cgi?id=59979

Move access key methods and members back to Document from TreeScope.
Also traverse into shadow trees when building the access key map.

No new tests. (refactoring)

  • dom/Document.cpp: (WebCore::Document::Document): (WebCore::Document::getElementByAccessKey): (WebCore::Document::buildAccessKeyMap): (WebCore::Document::invalidateAccessKeyMap):
  • dom/Document.h:
  • dom/TreeScope.cpp: (WebCore::TreeScope::TreeScope): (WebCore::TreeScope::destroyTreeScopeData):
  • dom/TreeScope.h:
Location:
trunk/Source/WebCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r85677 r85680  
     12011-05-03  Roland Steiner  <rolandsteiner@chromium.org>
     2
     3        Reviewed by Dimitri Glazkov.
     4
     5        Allow access keys to be used in shadow DOM
     6        https://bugs.webkit.org/show_bug.cgi?id=59979
     7
     8        Move access key methods and members back to Document from TreeScope.
     9        Also traverse into shadow trees when building the access key map.
     10
     11        No new tests. (refactoring)
     12
     13        * dom/Document.cpp:
     14        (WebCore::Document::Document):
     15        (WebCore::Document::getElementByAccessKey):
     16        (WebCore::Document::buildAccessKeyMap):
     17        (WebCore::Document::invalidateAccessKeyMap):
     18        * dom/Document.h:
     19        * dom/TreeScope.cpp:
     20        (WebCore::TreeScope::TreeScope):
     21        (WebCore::TreeScope::destroyTreeScopeData):
     22        * dom/TreeScope.h:
     23
    1242011-05-03  Dan Bernstein  <mitz@apple.com>
    225
  • trunk/Source/WebCore/dom/Document.cpp

    r85267 r85680  
    401401    , m_createRenderers(true)
    402402    , m_inPageCache(false)
     403    , m_accessKeyMapValid(false)
    403404    , m_useSecureKeyboardEntryWhenActive(false)
    404405    , m_isXHTML(isXHTML)
     
    608609{
    609610    return TreeScope::getElementById(id);
     611}
     612
     613Element* Document::getElementByAccessKey(const String& key)
     614{
     615    if (key.isEmpty())
     616        return 0;
     617    if (!m_accessKeyMapValid) {
     618        buildAccessKeyMap(this);
     619        m_accessKeyMapValid = true;
     620    }
     621    return m_elementsByAccessKey.get(key.impl());
     622}
     623
     624void Document::buildAccessKeyMap(ContainerNode* root)
     625{
     626     for (Node* n = root; n; n = n->traverseNextNode(root)) {
     627        if (!n->isElementNode())
     628            continue;
     629        Element* element = static_cast<Element*>(n);
     630        const AtomicString& accessKey = element->getAttribute(accesskeyAttr);
     631        if (!accessKey.isEmpty())
     632            m_elementsByAccessKey.set(accessKey.impl(), element);
     633        buildAccessKeyMap(element->shadowRoot());
     634    }
     635}
     636
     637void Document::invalidateAccessKeyMap()
     638{
     639    m_accessKeyMapValid = false;
     640    m_elementsByAccessKey.clear();
    610641}
    611642
  • trunk/Source/WebCore/dom/Document.h

    r85256 r85680  
    246246    Element* getElementById(const AtomicString& id) const;
    247247
     248    Element* getElementByAccessKey(const String& key);
     249    void invalidateAccessKeyMap();
     250
    248251    // DOM methods & attributes for Document
    249252
     
    11201123    void cacheDocumentElement() const;
    11211124
     1125    void buildAccessKeyMap(ContainerNode* root);
     1126
    11221127    void createStyleSelector();
    11231128
     
    13311336    HashSet<Element*> m_privateBrowsingStateChangedElements;
    13321337
     1338    HashMap<StringImpl*, Element*, CaseFoldingHash> m_elementsByAccessKey;   
     1339    bool m_accessKeyMapValid;
     1340
    13331341    bool m_useSecureKeyboardEntryWhenActive;
    13341342
  • trunk/Source/WebCore/dom/TreeScope.cpp

    r84517 r85680  
    4040    : ContainerNode(document)
    4141    , m_parentTreeScope(0)
    42     , m_accessKeyMapValid(false)
    4342    , m_numNodeListCaches(0)
    4443{
     
    5554    m_elementsById.clear();
    5655    m_imageMapsByName.clear();
    57     m_elementsByAccessKey.clear();
    5856}
    5957
     
    8381{
    8482    m_elementsById.remove(elementId.impl(), element);
    85 }
    86 
    87 Element* TreeScope::getElementByAccessKey(const String& key) const
    88 {
    89     if (key.isEmpty())
    90         return 0;
    91     if (!m_accessKeyMapValid) {
    92         for (Node* n = firstChild(); n; n = n->traverseNextNode()) {
    93             if (!n->isElementNode())
    94                 continue;
    95             Element* element = static_cast<Element*>(n);
    96             const AtomicString& accessKey = element->getAttribute(accesskeyAttr);
    97             if (!accessKey.isEmpty())
    98                 m_elementsByAccessKey.set(accessKey.impl(), element);
    99         }
    100         m_accessKeyMapValid = true;
    101     }
    102     return m_elementsByAccessKey.get(key.impl());
    103 }
    104 
    105 void TreeScope::invalidateAccessKeyMap()
    106 {
    107     m_accessKeyMapValid = false;
    108     m_elementsByAccessKey.clear();
    10983}
    11084
  • trunk/Source/WebCore/dom/TreeScope.h

    r84517 r85680  
    5252    HTMLMapElement* getImageMap(const String& url) const;
    5353
    54     Element* getElementByAccessKey(const String& key) const;
    55     void invalidateAccessKeyMap();
    56 
    5754    void addNodeListCache() { ++m_numNodeListCaches; }
    5855    void removeNodeListCache() { ASSERT(m_numNodeListCaches > 0); --m_numNodeListCaches; }
     
    8077    DocumentOrderedMap m_imageMapsByName;
    8178
    82     mutable HashMap<StringImpl*, Element*, CaseFoldingHash> m_elementsByAccessKey;   
    83     mutable bool m_accessKeyMapValid;
    84 
    8579    unsigned m_numNodeListCaches;
    8680};
Note: See TracChangeset for help on using the changeset viewer.