| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2008, 2010 Apple Inc. All rights reserved. | 2 * Copyright (C) 2008, 2010 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2008 David Smith <catfish.man@gmail.com> | 3 * Copyright (C) 2008 David Smith <catfish.man@gmail.com> |
| 4 * | 4 * |
| 5 * This library is free software; you can redistribute it and/or | 5 * This library is free software; you can redistribute it and/or |
| 6 * modify it under the terms of the GNU Library General Public | 6 * modify it under the terms of the GNU Library General Public |
| 7 * License as published by the Free Software Foundation; either | 7 * License as published by the Free Software Foundation; either |
| 8 * version 2 of the License, or (at your option) any later version. | 8 * version 2 of the License, or (at your option) any later version. |
| 9 * | 9 * |
| 10 * This library is distributed in the hope that it will be useful, | 10 * This library is distributed in the hope that it will be useful, |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 #include "TagNodeList.h" | 33 #include "TagNodeList.h" |
| 34 #if ENABLE(VIDEO_TRACK) | 34 #if ENABLE(VIDEO_TRACK) |
| 35 #include "TextTrack.h" | 35 #include "TextTrack.h" |
| 36 #endif | 36 #endif |
| 37 #include <wtf/HashSet.h> | 37 #include <wtf/HashSet.h> |
| 38 #include <wtf/OwnPtr.h> | 38 #include <wtf/OwnPtr.h> |
| 39 #include <wtf/PassOwnPtr.h> | 39 #include <wtf/PassOwnPtr.h> |
| 40 #include <wtf/text/AtomicString.h> | 40 #include <wtf/text/AtomicString.h> |
| 41 #include <wtf/text/StringHash.h> | 41 #include <wtf/text/StringHash.h> |
| 42 | 42 |
| 43 #if ENABLE(MICRODATA) | |
| 44 #include "HTMLPropertiesCollection.h" | |
| 45 #include "MicroDataAttributeTokenList.h" | |
| 46 #include "MicroDataItemList.h" | |
| 47 #endif | |
| 48 | |
| 49 namespace WebCore { | 43 namespace WebCore { |
| 50 | 44 |
| 51 class LabelsNodeList; | 45 class LabelsNodeList; |
| 52 class RadioNodeList; | 46 class RadioNodeList; |
| 53 class TreeScope; | 47 class TreeScope; |
| 54 | 48 |
| 55 class NodeListsNodeData { | 49 class NodeListsNodeData { |
| 56 WTF_MAKE_NONCOPYABLE(NodeListsNodeData); WTF_MAKE_FAST_ALLOCATED; | 50 WTF_MAKE_NONCOPYABLE(NodeListsNodeData); WTF_MAKE_FAST_ALLOCATED; |
| 57 public: | 51 public: |
| 58 void clearChildNodeListCache() | 52 void clearChildNodeListCache() |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 249 public: | 243 public: |
| 250 Vector<OwnPtr<MutationObserverRegistration> > registry; | 244 Vector<OwnPtr<MutationObserverRegistration> > registry; |
| 251 HashSet<MutationObserverRegistration*> transientRegistry; | 245 HashSet<MutationObserverRegistration*> transientRegistry; |
| 252 | 246 |
| 253 static PassOwnPtr<NodeMutationObserverData> create() { return adoptPtr(new N
odeMutationObserverData); } | 247 static PassOwnPtr<NodeMutationObserverData> create() { return adoptPtr(new N
odeMutationObserverData); } |
| 254 | 248 |
| 255 private: | 249 private: |
| 256 NodeMutationObserverData() { } | 250 NodeMutationObserverData() { } |
| 257 }; | 251 }; |
| 258 | 252 |
| 259 #if ENABLE(MICRODATA) | |
| 260 class NodeMicroDataTokenLists { | |
| 261 WTF_MAKE_NONCOPYABLE(NodeMicroDataTokenLists); WTF_MAKE_FAST_ALLOCATED; | |
| 262 public: | |
| 263 static PassOwnPtr<NodeMicroDataTokenLists> create() { return adoptPtr(new No
deMicroDataTokenLists); } | |
| 264 | |
| 265 MicroDataAttributeTokenList* itemProp(Node* node) const | |
| 266 { | |
| 267 if (!m_itemProp) | |
| 268 m_itemProp = MicroDataAttributeTokenList::create(toElement(node), HT
MLNames::itempropAttr); | |
| 269 return m_itemProp.get(); | |
| 270 } | |
| 271 | |
| 272 MicroDataAttributeTokenList* itemRef(Node* node) const | |
| 273 { | |
| 274 if (!m_itemRef) | |
| 275 m_itemRef = MicroDataAttributeTokenList::create(toElement(node), HTM
LNames::itemrefAttr); | |
| 276 return m_itemRef.get(); | |
| 277 } | |
| 278 | |
| 279 MicroDataAttributeTokenList* itemType(Node* node) const | |
| 280 { | |
| 281 if (!m_itemType) | |
| 282 m_itemType = MicroDataAttributeTokenList::create(toElement(node), HT
MLNames::itemtypeAttr); | |
| 283 return m_itemType.get(); | |
| 284 } | |
| 285 | |
| 286 private: | |
| 287 NodeMicroDataTokenLists() { } | |
| 288 | |
| 289 mutable RefPtr<MicroDataAttributeTokenList> m_itemProp; | |
| 290 mutable RefPtr<MicroDataAttributeTokenList> m_itemRef; | |
| 291 mutable RefPtr<MicroDataAttributeTokenList> m_itemType; | |
| 292 }; | |
| 293 #endif | |
| 294 | |
| 295 class NodeRareData : public NodeRareDataBase { | 253 class NodeRareData : public NodeRareDataBase { |
| 296 WTF_MAKE_NONCOPYABLE(NodeRareData); WTF_MAKE_FAST_ALLOCATED; | 254 WTF_MAKE_NONCOPYABLE(NodeRareData); WTF_MAKE_FAST_ALLOCATED; |
| 297 public: | 255 public: |
| 298 static PassOwnPtr<NodeRareData> create(RenderObject* renderer) { return adop
tPtr(new NodeRareData(renderer)); } | 256 static PassOwnPtr<NodeRareData> create(RenderObject* renderer) { return adop
tPtr(new NodeRareData(renderer)); } |
| 299 | 257 |
| 300 void clearNodeLists() { m_nodeLists.clear(); } | 258 void clearNodeLists() { m_nodeLists.clear(); } |
| 301 NodeListsNodeData* nodeLists() const { return m_nodeLists.get(); } | 259 NodeListsNodeData* nodeLists() const { return m_nodeLists.get(); } |
| 302 NodeListsNodeData* ensureNodeLists() | 260 NodeListsNodeData* ensureNodeLists() |
| 303 { | 261 { |
| 304 if (!m_nodeLists) | 262 if (!m_nodeLists) |
| 305 m_nodeLists = NodeListsNodeData::create(); | 263 m_nodeLists = NodeListsNodeData::create(); |
| 306 return m_nodeLists.get(); | 264 return m_nodeLists.get(); |
| 307 } | 265 } |
| 308 | 266 |
| 309 NodeMutationObserverData* mutationObserverData() { return m_mutationObserver
Data.get(); } | 267 NodeMutationObserverData* mutationObserverData() { return m_mutationObserver
Data.get(); } |
| 310 NodeMutationObserverData* ensureMutationObserverData() | 268 NodeMutationObserverData* ensureMutationObserverData() |
| 311 { | 269 { |
| 312 if (!m_mutationObserverData) | 270 if (!m_mutationObserverData) |
| 313 m_mutationObserverData = NodeMutationObserverData::create(); | 271 m_mutationObserverData = NodeMutationObserverData::create(); |
| 314 return m_mutationObserverData.get(); | 272 return m_mutationObserverData.get(); |
| 315 } | 273 } |
| 316 | 274 |
| 317 #if ENABLE(MICRODATA) | |
| 318 NodeMicroDataTokenLists* ensureMicroDataTokenLists() const | |
| 319 { | |
| 320 if (!m_microDataTokenLists) | |
| 321 m_microDataTokenLists = NodeMicroDataTokenLists::create(); | |
| 322 return m_microDataTokenLists.get(); | |
| 323 } | |
| 324 #endif | |
| 325 | |
| 326 unsigned connectedSubframeCount() const { return m_connectedFrameCount; } | 275 unsigned connectedSubframeCount() const { return m_connectedFrameCount; } |
| 327 void incrementConnectedSubframeCount(unsigned amount) | 276 void incrementConnectedSubframeCount(unsigned amount) |
| 328 { | 277 { |
| 329 m_connectedFrameCount += amount; | 278 m_connectedFrameCount += amount; |
| 330 } | 279 } |
| 331 void decrementConnectedSubframeCount(unsigned amount) | 280 void decrementConnectedSubframeCount(unsigned amount) |
| 332 { | 281 { |
| 333 ASSERT(m_connectedFrameCount); | 282 ASSERT(m_connectedFrameCount); |
| 334 ASSERT(amount <= m_connectedFrameCount); | 283 ASSERT(amount <= m_connectedFrameCount); |
| 335 m_connectedFrameCount -= amount; | 284 m_connectedFrameCount -= amount; |
| 336 } | 285 } |
| 337 | 286 |
| 338 // This member function is intentionally not virtual to avoid adding a vtabl
e pointer. | 287 // This member function is intentionally not virtual to avoid adding a vtabl
e pointer. |
| 339 void reportMemoryUsage(MemoryObjectInfo*) const; | 288 void reportMemoryUsage(MemoryObjectInfo*) const; |
| 340 | 289 |
| 341 protected: | 290 protected: |
| 342 NodeRareData(RenderObject* renderer) | 291 NodeRareData(RenderObject* renderer) |
| 343 : NodeRareDataBase(renderer) | 292 : NodeRareDataBase(renderer) |
| 344 , m_connectedFrameCount(0) | 293 , m_connectedFrameCount(0) |
| 345 { } | 294 { } |
| 346 | 295 |
| 347 private: | 296 private: |
| 348 unsigned m_connectedFrameCount : 10; // Must fit Page::maxNumberOfFrames. | 297 unsigned m_connectedFrameCount : 10; // Must fit Page::maxNumberOfFrames. |
| 349 | 298 |
| 350 OwnPtr<NodeListsNodeData> m_nodeLists; | 299 OwnPtr<NodeListsNodeData> m_nodeLists; |
| 351 OwnPtr<NodeMutationObserverData> m_mutationObserverData; | 300 OwnPtr<NodeMutationObserverData> m_mutationObserverData; |
| 352 | |
| 353 #if ENABLE(MICRODATA) | |
| 354 mutable OwnPtr<NodeMicroDataTokenLists> m_microDataTokenLists; | |
| 355 #endif | |
| 356 }; | 301 }; |
| 357 | 302 |
| 358 inline bool NodeListsNodeData::deleteThisAndUpdateNodeRareDataIfAboutToRemoveLas
tList(Node* ownerNode) | 303 inline bool NodeListsNodeData::deleteThisAndUpdateNodeRareDataIfAboutToRemoveLas
tList(Node* ownerNode) |
| 359 { | 304 { |
| 360 ASSERT(ownerNode); | 305 ASSERT(ownerNode); |
| 361 ASSERT(ownerNode->nodeLists() == this); | 306 ASSERT(ownerNode->nodeLists() == this); |
| 362 if ((m_childNodeList ? 1 : 0) + m_atomicNameCaches.size() + m_nameCaches.siz
e() + m_tagNodeListCacheNS.size() != 1) | 307 if ((m_childNodeList ? 1 : 0) + m_atomicNameCaches.size() + m_nameCaches.siz
e() + m_tagNodeListCacheNS.size() != 1) |
| 363 return false; | 308 return false; |
| 364 ownerNode->clearNodeLists(); | 309 ownerNode->clearNodeLists(); |
| 365 return true; | 310 return true; |
| 366 } | 311 } |
| 367 | 312 |
| 368 // Ensure the 10 bits reserved for the m_connectedFrameCount cannot overflow | 313 // Ensure the 10 bits reserved for the m_connectedFrameCount cannot overflow |
| 369 COMPILE_ASSERT(Page::maxNumberOfFrames < 1024, Frame_limit_should_fit_in_rare_da
ta_count); | 314 COMPILE_ASSERT(Page::maxNumberOfFrames < 1024, Frame_limit_should_fit_in_rare_da
ta_count); |
| 370 | 315 |
| 371 } // namespace WebCore | 316 } // namespace WebCore |
| 372 | 317 |
| 373 #endif // NodeRareData_h | 318 #endif // NodeRareData_h |
| OLD | NEW |