summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/dom/NodeRareData.h
diff options
context:
space:
mode:
authorSteve Block <steveblock@google.com>2011-05-06 11:45:16 +0100
committerSteve Block <steveblock@google.com>2011-05-12 13:44:10 +0100
commitcad810f21b803229eb11403f9209855525a25d57 (patch)
tree29a6fd0279be608e0fe9ffe9841f722f0f4e4269 /Source/WebCore/dom/NodeRareData.h
parent121b0cf4517156d0ac5111caf9830c51b69bae8f (diff)
downloadexternal_webkit-cad810f21b803229eb11403f9209855525a25d57.zip
external_webkit-cad810f21b803229eb11403f9209855525a25d57.tar.gz
external_webkit-cad810f21b803229eb11403f9209855525a25d57.tar.bz2
Merge WebKit at r75315: Initial merge by git.
Change-Id: I570314b346ce101c935ed22a626b48c2af266b84
Diffstat (limited to 'Source/WebCore/dom/NodeRareData.h')
-rw-r--r--Source/WebCore/dom/NodeRareData.h132
1 files changed, 132 insertions, 0 deletions
diff --git a/Source/WebCore/dom/NodeRareData.h b/Source/WebCore/dom/NodeRareData.h
new file mode 100644
index 0000000..ab208d2
--- /dev/null
+++ b/Source/WebCore/dom/NodeRareData.h
@@ -0,0 +1,132 @@
+/*
+ * Copyright (C) 2008, 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2008 David Smith <catfish.man@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NodeRareData_h
+#define NodeRareData_h
+
+#include "ClassNodeList.h"
+#include "DynamicNodeList.h"
+#include "NameNodeList.h"
+#include "QualifiedName.h"
+#include "TagNodeList.h"
+#include <wtf/HashSet.h>
+#include <wtf/OwnPtr.h>
+#include <wtf/PassOwnPtr.h>
+#include <wtf/text/StringHash.h>
+
+namespace WebCore {
+
+struct NodeListsNodeData : Noncopyable {
+ typedef HashSet<DynamicNodeList*> NodeListSet;
+ NodeListSet m_listsWithCaches;
+
+ RefPtr<DynamicNodeList::Caches> m_childNodeListCaches;
+
+ typedef HashMap<String, ClassNodeList*> ClassNodeListCache;
+ ClassNodeListCache m_classNodeListCache;
+
+ typedef HashMap<String, NameNodeList*> NameNodeListCache;
+ NameNodeListCache m_nameNodeListCache;
+
+ typedef HashMap<RefPtr<QualifiedName::QualifiedNameImpl>, TagNodeList*> TagNodeListCache;
+ TagNodeListCache m_tagNodeListCache;
+
+ RefPtr<DynamicNodeList> m_labelsNodeListCache;
+
+ static PassOwnPtr<NodeListsNodeData> create()
+ {
+ return new NodeListsNodeData;
+ }
+
+ void invalidateCaches();
+ void invalidateCachesThatDependOnAttributes();
+ bool isEmpty() const;
+
+private:
+ NodeListsNodeData()
+ : m_childNodeListCaches(DynamicNodeList::Caches::create()), m_labelsNodeListCache(0)
+ {
+ }
+};
+
+class NodeRareData : public Noncopyable {
+public:
+ NodeRareData()
+ : m_tabIndex(0)
+ , m_tabIndexWasSetExplicitly(false)
+ , m_isFocused(false)
+ , m_needsFocusAppearanceUpdateSoonAfterAttach(false)
+ {
+ }
+
+ virtual ~NodeRareData()
+ {
+ }
+
+ typedef HashMap<const Node*, NodeRareData*> NodeRareDataMap;
+
+ static NodeRareDataMap& rareDataMap()
+ {
+ static NodeRareDataMap* dataMap = new NodeRareDataMap;
+ return *dataMap;
+ }
+
+ static NodeRareData* rareDataFromMap(const Node* node)
+ {
+ return rareDataMap().get(node);
+ }
+
+ void clearNodeLists() { m_nodeLists.clear(); }
+ void setNodeLists(PassOwnPtr<NodeListsNodeData> lists) { m_nodeLists = lists; }
+ NodeListsNodeData* nodeLists() const { return m_nodeLists.get(); }
+
+ short tabIndex() const { return m_tabIndex; }
+ void setTabIndexExplicitly(short index) { m_tabIndex = index; m_tabIndexWasSetExplicitly = true; }
+ bool tabIndexSetExplicitly() const { return m_tabIndexWasSetExplicitly; }
+
+ EventTargetData* eventTargetData() { return m_eventTargetData.get(); }
+ EventTargetData* ensureEventTargetData()
+ {
+ if (!m_eventTargetData)
+ m_eventTargetData.set(new EventTargetData);
+ return m_eventTargetData.get();
+ }
+
+ bool isFocused() const { return m_isFocused; }
+ void setFocused(bool focused) { m_isFocused = focused; }
+
+protected:
+ // for ElementRareData
+ bool needsFocusAppearanceUpdateSoonAfterAttach() const { return m_needsFocusAppearanceUpdateSoonAfterAttach; }
+ void setNeedsFocusAppearanceUpdateSoonAfterAttach(bool needs) { m_needsFocusAppearanceUpdateSoonAfterAttach = needs; }
+
+private:
+ OwnPtr<NodeListsNodeData> m_nodeLists;
+ OwnPtr<EventTargetData> m_eventTargetData;
+ short m_tabIndex;
+ bool m_tabIndexWasSetExplicitly : 1;
+ bool m_isFocused : 1;
+ bool m_needsFocusAppearanceUpdateSoonAfterAttach : 1;
+};
+
+} // namespace WebCore
+
+#endif // NodeRareData_h