1635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/* 2635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Copyright (C) 2008 Apple Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2008 David Smith <catfish.man@gmail.com> 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version. 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful, 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details. 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB. If not, write to 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA. 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef NodeRareData_h 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define NodeRareData_h 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "DynamicNodeList.h" 26635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "EventListener.h" 27635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "RegisteredEventListener.h" 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "StringHash.h" 29635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "QualifiedName.h" 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/HashSet.h> 315f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include <wtf/PassOwnPtr.h> 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/OwnPtr.h> 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 36643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockstruct NodeListsNodeData : Noncopyable { 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project typedef HashSet<DynamicNodeList*> NodeListSet; 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NodeListSet m_listsWithCaches; 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch RefPtr<DynamicNodeList::Caches> m_childNodeListCaches; 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch typedef HashMap<String, RefPtr<DynamicNodeList::Caches> > CacheMap; 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CacheMap m_classNodeListCaches; 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CacheMap m_nameNodeListCaches; 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch typedef HashMap<QualifiedName, RefPtr<DynamicNodeList::Caches> > TagCacheMap; 47635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project TagCacheMap m_tagNodeListCaches; 485f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch static PassOwnPtr<NodeListsNodeData> create() 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return new NodeListsNodeData; 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void invalidateCaches(); 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void invalidateCachesThatDependOnAttributes(); 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isEmpty() const; 575f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 585f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianprivate: 590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NodeListsNodeData() 600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch : m_childNodeListCaches(DynamicNodeList::Caches::create()) 610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 65643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass NodeRareData : public Noncopyable { 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic: 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NodeRareData() 68635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project : m_tabIndex(0) 69635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project , m_tabIndexWasSetExplicitly(false) 70635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project , m_isFocused(false) 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_needsFocusAppearanceUpdateSoonAfterAttach(false) 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project typedef HashMap<const Node*, NodeRareData*> NodeRareDataMap; 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static NodeRareDataMap& rareDataMap() 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static NodeRareDataMap* dataMap = new NodeRareDataMap; 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return *dataMap; 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static NodeRareData* rareDataFromMap(const Node* node) 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return rareDataMap().get(node); 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void clearNodeLists() { m_nodeLists.clear(); } 895f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian void setNodeLists(PassOwnPtr<NodeListsNodeData> lists) { m_nodeLists = lists; } 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NodeListsNodeData* nodeLists() const { return m_nodeLists.get(); } 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project short tabIndex() const { return m_tabIndex; } 93635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void setTabIndexExplicitly(short index) { m_tabIndex = index; m_tabIndexWasSetExplicitly = true; } 94635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bool tabIndexSetExplicitly() const { return m_tabIndexWasSetExplicitly; } 95635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 96231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block EventTargetData* eventTargetData() { return m_eventTargetData.get(); } 97231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block EventTargetData* ensureEventTargetData() 98635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 99231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!m_eventTargetData) 100231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block m_eventTargetData.set(new EventTargetData); 101231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return m_eventTargetData.get(); 102635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 103635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 104635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bool isFocused() const { return m_isFocused; } 105635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void setFocused(bool focused) { m_isFocused = focused; } 106635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 107635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectprotected: 108635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // for ElementRareData 109635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bool needsFocusAppearanceUpdateSoonAfterAttach() const { return m_needsFocusAppearanceUpdateSoonAfterAttach; } 110635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void setNeedsFocusAppearanceUpdateSoonAfterAttach(bool needs) { m_needsFocusAppearanceUpdateSoonAfterAttach = needs; } 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate: 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project OwnPtr<NodeListsNodeData> m_nodeLists; 114231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block OwnPtr<EventTargetData> m_eventTargetData; 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project short m_tabIndex; 116635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bool m_tabIndexWasSetExplicitly : 1; 117635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bool m_isFocused : 1; 118635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bool m_needsFocusAppearanceUpdateSoonAfterAttach : 1; 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 120635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} //namespace 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 124