Changeset 85680 in webkit
- Timestamp:
- May 3, 2011 4:08:21 PM (13 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r85677 r85680 1 2011-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 1 24 2011-05-03 Dan Bernstein <mitz@apple.com> 2 25 -
trunk/Source/WebCore/dom/Document.cpp
r85267 r85680 401 401 , m_createRenderers(true) 402 402 , m_inPageCache(false) 403 , m_accessKeyMapValid(false) 403 404 , m_useSecureKeyboardEntryWhenActive(false) 404 405 , m_isXHTML(isXHTML) … … 608 609 { 609 610 return TreeScope::getElementById(id); 611 } 612 613 Element* 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 624 void 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 637 void Document::invalidateAccessKeyMap() 638 { 639 m_accessKeyMapValid = false; 640 m_elementsByAccessKey.clear(); 610 641 } 611 642 -
trunk/Source/WebCore/dom/Document.h
r85256 r85680 246 246 Element* getElementById(const AtomicString& id) const; 247 247 248 Element* getElementByAccessKey(const String& key); 249 void invalidateAccessKeyMap(); 250 248 251 // DOM methods & attributes for Document 249 252 … … 1120 1123 void cacheDocumentElement() const; 1121 1124 1125 void buildAccessKeyMap(ContainerNode* root); 1126 1122 1127 void createStyleSelector(); 1123 1128 … … 1331 1336 HashSet<Element*> m_privateBrowsingStateChangedElements; 1332 1337 1338 HashMap<StringImpl*, Element*, CaseFoldingHash> m_elementsByAccessKey; 1339 bool m_accessKeyMapValid; 1340 1333 1341 bool m_useSecureKeyboardEntryWhenActive; 1334 1342 -
trunk/Source/WebCore/dom/TreeScope.cpp
r84517 r85680 40 40 : ContainerNode(document) 41 41 , m_parentTreeScope(0) 42 , m_accessKeyMapValid(false)43 42 , m_numNodeListCaches(0) 44 43 { … … 55 54 m_elementsById.clear(); 56 55 m_imageMapsByName.clear(); 57 m_elementsByAccessKey.clear();58 56 } 59 57 … … 83 81 { 84 82 m_elementsById.remove(elementId.impl(), element); 85 }86 87 Element* TreeScope::getElementByAccessKey(const String& key) const88 {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();109 83 } 110 84 -
trunk/Source/WebCore/dom/TreeScope.h
r84517 r85680 52 52 HTMLMapElement* getImageMap(const String& url) const; 53 53 54 Element* getElementByAccessKey(const String& key) const;55 void invalidateAccessKeyMap();56 57 54 void addNodeListCache() { ++m_numNodeListCaches; } 58 55 void removeNodeListCache() { ASSERT(m_numNodeListCaches > 0); --m_numNodeListCaches; } … … 80 77 DocumentOrderedMap m_imageMapsByName; 81 78 82 mutable HashMap<StringImpl*, Element*, CaseFoldingHash> m_elementsByAccessKey;83 mutable bool m_accessKeyMapValid;84 85 79 unsigned m_numNodeListCaches; 86 80 };
Note: See TracChangeset
for help on using the changeset viewer.