| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
| 4 * (C) 2001 Dirk Mueller (mueller@kde.org) | 4 * (C) 2001 Dirk Mueller (mueller@kde.org) |
| 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r
ights reserved. | 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r
ights reserved. |
| 6 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) | 6 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) |
| 7 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) | 7 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) |
| 8 * | 8 * |
| 9 * This library is free software; you can redistribute it and/or | 9 * This library is free software; you can redistribute it and/or |
| 10 * modify it under the terms of the GNU Library General Public | 10 * modify it under the terms of the GNU Library General Public |
| (...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 320 cache->remove(this); | 320 cache->remove(this); |
| 321 } | 321 } |
| 322 } | 322 } |
| 323 | 323 |
| 324 NodeRareData* Node::rareData() const | 324 NodeRareData* Node::rareData() const |
| 325 { | 325 { |
| 326 ASSERT_WITH_SECURITY_IMPLICATION(hasRareData()); | 326 ASSERT_WITH_SECURITY_IMPLICATION(hasRareData()); |
| 327 return static_cast<NodeRareData*>(m_data.m_rareData); | 327 return static_cast<NodeRareData*>(m_data.m_rareData); |
| 328 } | 328 } |
| 329 | 329 |
| 330 NodeRareData* Node::ensureRareData() | 330 NodeRareData& Node::ensureRareData() |
| 331 { | 331 { |
| 332 if (hasRareData()) | 332 if (hasRareData()) |
| 333 return rareData(); | 333 return *rareData(); |
| 334 | 334 |
| 335 NodeRareData* data; | 335 NodeRareData* data; |
| 336 if (isElementNode()) | 336 if (isElementNode()) |
| 337 data = ElementRareData::create(m_data.m_renderer).leakPtr(); | 337 data = ElementRareData::create(m_data.m_renderer).leakPtr(); |
| 338 else | 338 else |
| 339 data = NodeRareData::create(m_data.m_renderer).leakPtr(); | 339 data = NodeRareData::create(m_data.m_renderer).leakPtr(); |
| 340 ASSERT(data); | 340 ASSERT(data); |
| 341 | 341 |
| 342 m_data.m_rareData = data; | 342 m_data.m_rareData = data; |
| 343 setFlag(HasRareDataFlag); | 343 setFlag(HasRareDataFlag); |
| 344 return data; | 344 return *data; |
| 345 } | 345 } |
| 346 | 346 |
| 347 void Node::clearRareData() | 347 void Node::clearRareData() |
| 348 { | 348 { |
| 349 ASSERT(hasRareData()); | 349 ASSERT(hasRareData()); |
| 350 ASSERT(!transientMutationObserverRegistry() || transientMutationObserverRegi
stry()->isEmpty()); | 350 ASSERT(!transientMutationObserverRegistry() || transientMutationObserverRegi
stry()->isEmpty()); |
| 351 | 351 |
| 352 RenderObject* renderer = m_data.m_rareData->renderer(); | 352 RenderObject* renderer = m_data.m_rareData->renderer(); |
| 353 if (isElementNode()) | 353 if (isElementNode()) |
| 354 delete static_cast<ElementRareData*>(m_data.m_rareData); | 354 delete static_cast<ElementRareData*>(m_data.m_rareData); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 373 return String(); | 373 return String(); |
| 374 } | 374 } |
| 375 | 375 |
| 376 void Node::setNodeValue(const String&) | 376 void Node::setNodeValue(const String&) |
| 377 { | 377 { |
| 378 // By default, setting nodeValue has no effect. | 378 // By default, setting nodeValue has no effect. |
| 379 } | 379 } |
| 380 | 380 |
| 381 PassRefPtr<NodeList> Node::childNodes() | 381 PassRefPtr<NodeList> Node::childNodes() |
| 382 { | 382 { |
| 383 return ensureRareData()->ensureNodeLists()->ensureChildNodeList(this); | 383 return ensureRareData().ensureNodeLists()->ensureChildNodeList(this); |
| 384 } | 384 } |
| 385 | 385 |
| 386 Node *Node::lastDescendant() const | 386 Node *Node::lastDescendant() const |
| 387 { | 387 { |
| 388 Node *n = const_cast<Node *>(this); | 388 Node *n = const_cast<Node *>(this); |
| 389 while (n && n->lastChild()) | 389 while (n && n->lastChild()) |
| 390 n = n->lastChild(); | 390 n = n->lastChild(); |
| 391 return n; | 391 return n; |
| 392 } | 392 } |
| 393 | 393 |
| (...skipping 812 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1206 } | 1206 } |
| 1207 | 1207 |
| 1208 // FIXME: End of obviously misplaced HTML editing functions. Try to move these
out of Node. | 1208 // FIXME: End of obviously misplaced HTML editing functions. Try to move these
out of Node. |
| 1209 | 1209 |
| 1210 PassRefPtr<NodeList> Node::getElementsByTagName(const AtomicString& localName) | 1210 PassRefPtr<NodeList> Node::getElementsByTagName(const AtomicString& localName) |
| 1211 { | 1211 { |
| 1212 if (localName.isNull()) | 1212 if (localName.isNull()) |
| 1213 return 0; | 1213 return 0; |
| 1214 | 1214 |
| 1215 if (document().isHTMLDocument()) | 1215 if (document().isHTMLDocument()) |
| 1216 return ensureRareData()->ensureNodeLists()->addCacheWithAtomicName<HTMLT
agNodeList>(this, HTMLTagNodeListType, localName); | 1216 return ensureRareData().ensureNodeLists()->addCacheWithAtomicName<HTMLTa
gNodeList>(this, HTMLTagNodeListType, localName); |
| 1217 return ensureRareData()->ensureNodeLists()->addCacheWithAtomicName<TagNodeLi
st>(this, TagNodeListType, localName); | 1217 return ensureRareData().ensureNodeLists()->addCacheWithAtomicName<TagNodeLis
t>(this, TagNodeListType, localName); |
| 1218 } | 1218 } |
| 1219 | 1219 |
| 1220 PassRefPtr<NodeList> Node::getElementsByTagNameNS(const AtomicString& namespaceU
RI, const AtomicString& localName) | 1220 PassRefPtr<NodeList> Node::getElementsByTagNameNS(const AtomicString& namespaceU
RI, const AtomicString& localName) |
| 1221 { | 1221 { |
| 1222 if (localName.isNull()) | 1222 if (localName.isNull()) |
| 1223 return 0; | 1223 return 0; |
| 1224 | 1224 |
| 1225 if (namespaceURI == starAtom) | 1225 if (namespaceURI == starAtom) |
| 1226 return getElementsByTagName(localName); | 1226 return getElementsByTagName(localName); |
| 1227 | 1227 |
| 1228 return ensureRareData()->ensureNodeLists()->addCacheWithQualifiedName(this,
namespaceURI.isEmpty() ? nullAtom : namespaceURI, localName); | 1228 return ensureRareData().ensureNodeLists()->addCacheWithQualifiedName(this, n
amespaceURI.isEmpty() ? nullAtom : namespaceURI, localName); |
| 1229 } | 1229 } |
| 1230 | 1230 |
| 1231 PassRefPtr<NodeList> Node::getElementsByName(const String& elementName) | 1231 PassRefPtr<NodeList> Node::getElementsByName(const String& elementName) |
| 1232 { | 1232 { |
| 1233 return ensureRareData()->ensureNodeLists()->addCacheWithAtomicName<NameNodeL
ist>(this, NameNodeListType, elementName); | 1233 return ensureRareData().ensureNodeLists()->addCacheWithAtomicName<NameNodeLi
st>(this, NameNodeListType, elementName); |
| 1234 } | 1234 } |
| 1235 | 1235 |
| 1236 PassRefPtr<NodeList> Node::getElementsByClassName(const String& classNames) | 1236 PassRefPtr<NodeList> Node::getElementsByClassName(const String& classNames) |
| 1237 { | 1237 { |
| 1238 return ensureRareData()->ensureNodeLists()->addCacheWithName<ClassNodeList>(
this, ClassNodeListType, classNames); | 1238 return ensureRareData().ensureNodeLists()->addCacheWithName<ClassNodeList>(t
his, ClassNodeListType, classNames); |
| 1239 } | 1239 } |
| 1240 | 1240 |
| 1241 PassRefPtr<RadioNodeList> Node::radioNodeList(const AtomicString& name) | 1241 PassRefPtr<RadioNodeList> Node::radioNodeList(const AtomicString& name) |
| 1242 { | 1242 { |
| 1243 ASSERT(hasTagName(formTag) || hasTagName(fieldsetTag)); | 1243 ASSERT(hasTagName(formTag) || hasTagName(fieldsetTag)); |
| 1244 return ensureRareData()->ensureNodeLists()->addCacheWithAtomicName<RadioNode
List>(this, RadioNodeListType, name); | 1244 return ensureRareData().ensureNodeLists()->addCacheWithAtomicName<RadioNodeL
ist>(this, RadioNodeListType, name); |
| 1245 } | 1245 } |
| 1246 | 1246 |
| 1247 PassRefPtr<Element> Node::querySelector(const AtomicString& selectors, Exception
State& es) | 1247 PassRefPtr<Element> Node::querySelector(const AtomicString& selectors, Exception
State& es) |
| 1248 { | 1248 { |
| 1249 if (selectors.isEmpty()) { | 1249 if (selectors.isEmpty()) { |
| 1250 es.throwDOMException(SyntaxError, ExceptionMessages::failedToExecute("qu
erySelector", "Node", "The provided selector is empty.")); | 1250 es.throwDOMException(SyntaxError, ExceptionMessages::failedToExecute("qu
erySelector", "Node", "The provided selector is empty.")); |
| 1251 return 0; | 1251 return 0; |
| 1252 } | 1252 } |
| 1253 | 1253 |
| 1254 SelectorQuery* selectorQuery = document().selectorQueryCache()->add(selector
s, document(), es); | 1254 SelectorQuery* selectorQuery = document().selectorQueryCache()->add(selector
s, document(), es); |
| (...skipping 908 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2163 collectMatchingObserversForMutation(observers, transientMutationObserverRegi
stry(), this, type, attributeName); | 2163 collectMatchingObserversForMutation(observers, transientMutationObserverRegi
stry(), this, type, attributeName); |
| 2164 for (Node* node = parentNode(); node; node = node->parentNode()) { | 2164 for (Node* node = parentNode(); node; node = node->parentNode()) { |
| 2165 collectMatchingObserversForMutation(observers, node->mutationObserverReg
istry(), this, type, attributeName); | 2165 collectMatchingObserversForMutation(observers, node->mutationObserverReg
istry(), this, type, attributeName); |
| 2166 collectMatchingObserversForMutation(observers, node->transientMutationOb
serverRegistry(), this, type, attributeName); | 2166 collectMatchingObserversForMutation(observers, node->transientMutationOb
serverRegistry(), this, type, attributeName); |
| 2167 } | 2167 } |
| 2168 } | 2168 } |
| 2169 | 2169 |
| 2170 void Node::registerMutationObserver(MutationObserver* observer, MutationObserver
Options options, const HashSet<AtomicString>& attributeFilter) | 2170 void Node::registerMutationObserver(MutationObserver* observer, MutationObserver
Options options, const HashSet<AtomicString>& attributeFilter) |
| 2171 { | 2171 { |
| 2172 MutationObserverRegistration* registration = 0; | 2172 MutationObserverRegistration* registration = 0; |
| 2173 Vector<OwnPtr<MutationObserverRegistration> >& registry = ensureRareData()->
ensureMutationObserverData()->registry; | 2173 Vector<OwnPtr<MutationObserverRegistration> >& registry = ensureRareData().e
nsureMutationObserverData()->registry; |
| 2174 for (size_t i = 0; i < registry.size(); ++i) { | 2174 for (size_t i = 0; i < registry.size(); ++i) { |
| 2175 if (registry[i]->observer() == observer) { | 2175 if (registry[i]->observer() == observer) { |
| 2176 registration = registry[i].get(); | 2176 registration = registry[i].get(); |
| 2177 registration->resetObservation(options, attributeFilter); | 2177 registration->resetObservation(options, attributeFilter); |
| 2178 } | 2178 } |
| 2179 } | 2179 } |
| 2180 | 2180 |
| 2181 if (!registration) { | 2181 if (!registration) { |
| 2182 registry.append(MutationObserverRegistration::create(observer, this, opt
ions, attributeFilter)); | 2182 registry.append(MutationObserverRegistration::create(observer, this, opt
ions, attributeFilter)); |
| 2183 registration = registry.last().get(); | 2183 registration = registry.last().get(); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 2200 | 2200 |
| 2201 // Deleting the registration may cause this node to be derefed, so we must m
ake sure the Vector operation completes | 2201 // Deleting the registration may cause this node to be derefed, so we must m
ake sure the Vector operation completes |
| 2202 // before that, in case |this| is destroyed (see MutationObserverRegistratio
n::m_registrationNodeKeepAlive). | 2202 // before that, in case |this| is destroyed (see MutationObserverRegistratio
n::m_registrationNodeKeepAlive). |
| 2203 // FIXME: Simplify the registration/transient registration logic to make thi
s understandable by humans. | 2203 // FIXME: Simplify the registration/transient registration logic to make thi
s understandable by humans. |
| 2204 RefPtr<Node> protect(this); | 2204 RefPtr<Node> protect(this); |
| 2205 registry->remove(index); | 2205 registry->remove(index); |
| 2206 } | 2206 } |
| 2207 | 2207 |
| 2208 void Node::registerTransientMutationObserver(MutationObserverRegistration* regis
tration) | 2208 void Node::registerTransientMutationObserver(MutationObserverRegistration* regis
tration) |
| 2209 { | 2209 { |
| 2210 ensureRareData()->ensureMutationObserverData()->transientRegistry.add(regist
ration); | 2210 ensureRareData().ensureMutationObserverData()->transientRegistry.add(registr
ation); |
| 2211 } | 2211 } |
| 2212 | 2212 |
| 2213 void Node::unregisterTransientMutationObserver(MutationObserverRegistration* reg
istration) | 2213 void Node::unregisterTransientMutationObserver(MutationObserverRegistration* reg
istration) |
| 2214 { | 2214 { |
| 2215 HashSet<MutationObserverRegistration*>* transientRegistry = transientMutatio
nObserverRegistry(); | 2215 HashSet<MutationObserverRegistration*>* transientRegistry = transientMutatio
nObserverRegistry(); |
| 2216 ASSERT(transientRegistry); | 2216 ASSERT(transientRegistry); |
| 2217 if (!transientRegistry) | 2217 if (!transientRegistry) |
| 2218 return; | 2218 return; |
| 2219 | 2219 |
| 2220 ASSERT(transientRegistry->contains(registration)); | 2220 ASSERT(transientRegistry->contains(registration)); |
| (...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2481 } | 2481 } |
| 2482 | 2482 |
| 2483 unsigned Node::connectedSubframeCount() const | 2483 unsigned Node::connectedSubframeCount() const |
| 2484 { | 2484 { |
| 2485 return hasRareData() ? rareData()->connectedSubframeCount() : 0; | 2485 return hasRareData() ? rareData()->connectedSubframeCount() : 0; |
| 2486 } | 2486 } |
| 2487 | 2487 |
| 2488 void Node::incrementConnectedSubframeCount(unsigned amount) | 2488 void Node::incrementConnectedSubframeCount(unsigned amount) |
| 2489 { | 2489 { |
| 2490 ASSERT(isContainerNode()); | 2490 ASSERT(isContainerNode()); |
| 2491 ensureRareData()->incrementConnectedSubframeCount(amount); | 2491 ensureRareData().incrementConnectedSubframeCount(amount); |
| 2492 } | 2492 } |
| 2493 | 2493 |
| 2494 void Node::decrementConnectedSubframeCount(unsigned amount) | 2494 void Node::decrementConnectedSubframeCount(unsigned amount) |
| 2495 { | 2495 { |
| 2496 rareData()->decrementConnectedSubframeCount(amount); | 2496 rareData()->decrementConnectedSubframeCount(amount); |
| 2497 } | 2497 } |
| 2498 | 2498 |
| 2499 void Node::updateAncestorConnectedSubframeCountForRemoval() const | 2499 void Node::updateAncestorConnectedSubframeCountForRemoval() const |
| 2500 { | 2500 { |
| 2501 unsigned count = connectedSubframeCount(); | 2501 unsigned count = connectedSubframeCount(); |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2634 node->showTreeForThis(); | 2634 node->showTreeForThis(); |
| 2635 } | 2635 } |
| 2636 | 2636 |
| 2637 void showNodePath(const WebCore::Node* node) | 2637 void showNodePath(const WebCore::Node* node) |
| 2638 { | 2638 { |
| 2639 if (node) | 2639 if (node) |
| 2640 node->showNodePathForThis(); | 2640 node->showNodePathForThis(); |
| 2641 } | 2641 } |
| 2642 | 2642 |
| 2643 #endif | 2643 #endif |
| OLD | NEW |