Changeset 46510 in webkit
- Timestamp:
- Jul 28, 2009 5:49:58 PM (15 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 22 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r46509 r46510 1 2009-07-28 Nikolas Zimmermann <nikolas.zimmermann@torchmobile.com> 2 3 Reviewed by Adam Treat. 4 5 [WML] WML*Element classes mostly implement insertedIntoDocument(), not removedFromDocument() 6 https://bugs.webkit.org/show_bug.cgi?id=27786 7 8 WML*Element classes mostly implement insertedIntoDocument(), not removedFromDocument(). 9 The only case where this is relevant in WML is error handling. The parsed WML 10 tree fragment is inserted in an XHTML compound error document. This requires 11 removedFromDocument() to be correctly implemented otherwhise we run into 12 trouble (visible when using run-webkit-tests fast/wml --random). 13 14 * wml/WMLAnchorElement.cpp: 15 (WebCore::WMLAnchorElement::registerTask): 16 (WebCore::WMLAnchorElement::deregisterTask): 17 * wml/WMLAnchorElement.h: 18 * wml/WMLDoElement.cpp: 19 (WebCore::WMLDoElement::removedFromDocument): 20 (WebCore::WMLDoElement::registerTask): 21 (WebCore::WMLDoElement::deregisterTask): 22 * wml/WMLDoElement.h: 23 * wml/WMLEventHandlingElement.cpp: 24 (WebCore::WMLEventHandlingElement::registerDoElement): 25 (WebCore::WMLEventHandlingElement::deregisterDoElement): 26 * wml/WMLEventHandlingElement.h: 27 * wml/WMLFieldSetElement.cpp: 28 (WebCore::WMLFieldSetElement::removedFromDocument): 29 * wml/WMLGoElement.cpp: 30 (WebCore::WMLGoElement::registerPostfieldElement): 31 (WebCore::WMLGoElement::deregisterPostfieldElement): 32 * wml/WMLGoElement.h: 33 * wml/WMLIntrinsicEventHandler.cpp: 34 (WebCore::WMLIntrinsicEventHandler::deregisterIntrinsicEvent): 35 * wml/WMLIntrinsicEventHandler.h: 36 * wml/WMLOnEventElement.cpp: 37 (WebCore::eventHandlingParent): 38 (WebCore::WMLOnEventElement::registerTask): 39 (WebCore::WMLOnEventElement::deregisterTask): 40 * wml/WMLOnEventElement.h: 41 * wml/WMLPostfieldElement.cpp: 42 (WebCore::WMLPostfieldElement::removedFromDocument): 43 * wml/WMLPostfieldElement.h: 44 * wml/WMLSetvarElement.cpp: 45 (WebCore::WMLSetvarElement::removedFromDocument): 46 * wml/WMLSetvarElement.h: 47 * wml/WMLTaskElement.cpp: 48 (WebCore::WMLTaskElement::removedFromDocument): 49 (WebCore::WMLTaskElement::registerVariableSetter): 50 (WebCore::WMLTaskElement::deregisterVariableSetter): 51 (WebCore::WMLTaskElement::storeVariableState): 52 * wml/WMLTaskElement.h: 53 * wml/WMLTimerElement.cpp: 54 (WebCore::WMLTimerElement::removedFromDocument): 55 * wml/WMLTimerElement.h: 56 1 57 2009-07-28 David Levin <levin@chromium.org> 2 58 -
trunk/WebCore/wml/WMLAnchorElement.cpp
r45083 r46510 64 64 } 65 65 66 void WMLAnchorElement::registerTask(WMLTaskElement* task) 67 { 68 ASSERT(!m_task); 69 m_task = task; 70 } 71 72 void WMLAnchorElement::deregisterTask(WMLTaskElement* task) 73 { 74 ASSERT(m_task == task); 75 m_task = 0; 76 } 77 66 78 } 67 79 -
trunk/WebCore/wml/WMLAnchorElement.h
r39432 r46510 38 38 private: 39 39 friend class WMLTaskElement; 40 void registerTask(WMLTaskElement* task) { m_task = task; } 40 void registerTask(WMLTaskElement*); 41 void deregisterTask(WMLTaskElement*); 41 42 42 43 WMLTaskElement* m_task; -
trunk/WebCore/wml/WMLDoElement.cpp
r46394 r46510 123 123 } 124 124 125 void WMLDoElement::removedFromDocument() 126 { 127 Node* parent = parentNode(); 128 ASSERT(parent); 129 130 if (parent && parent->isWMLElement()) { 131 if (WMLEventHandlingElement* eventHandlingElement = toWMLEventHandlingElement(static_cast<WMLElement*>(parent))) 132 eventHandlingElement->deregisterDoElement(this); 133 } 134 135 WMLElement::removedFromDocument(); 136 } 137 125 138 void WMLDoElement::attach() 126 139 { … … 155 168 } 156 169 170 void WMLDoElement::registerTask(WMLTaskElement* task) 171 { 172 ASSERT(!m_task); 173 m_task = task; 174 } 175 176 void WMLDoElement::deregisterTask(WMLTaskElement* task) 177 { 178 ASSERT(m_task == task); 179 m_task = 0; 180 } 181 157 182 String WMLDoElement::label() const 158 183 { -
trunk/WebCore/wml/WMLDoElement.h
r46394 r46510 36 36 virtual void parseMappedAttribute(MappedAttribute*); 37 37 virtual void insertedIntoDocument(); 38 virtual void removedFromDocument(); 38 39 39 40 virtual void attach(); … … 41 42 virtual void recalcStyle(StyleChange); 42 43 43 void registerTask(WMLTaskElement* task) { m_task = task; } 44 void registerTask(WMLTaskElement*); 45 void deregisterTask(WMLTaskElement*); 44 46 45 47 bool isActive() const { return m_isActive; } -
trunk/WebCore/wml/WMLEventHandlingElement.cpp
r40204 r46510 62 62 } 63 63 64 ASSERT(m_doElements.find(doElement) == WTF::notFound); 64 65 m_doElements.append(doElement); 65 66 doElement->setActive(true); 67 } 68 69 void WMLEventHandlingElement::deregisterDoElement(WMLDoElement* doElement) 70 { 71 doElement->setActive(false); 72 73 size_t position = m_doElements.find(doElement); 74 if (position == WTF::notFound) 75 return; 76 77 m_doElements.remove(position); 66 78 } 67 79 -
trunk/WebCore/wml/WMLEventHandlingElement.h
r40204 r46510 43 43 Vector<WMLDoElement*>& doElements() { return m_doElements; } 44 44 void registerDoElement(WMLDoElement*, Document*); 45 void deregisterDoElement(WMLDoElement*); 45 46 46 47 private: -
trunk/WebCore/wml/WMLFieldSetElement.cpp
r45084 r46510 67 67 void WMLFieldSetElement::removedFromDocument() 68 68 { 69 m_insertedLegendElement.clear(); 69 70 WMLElement::removedFromDocument(); 70 m_insertedLegendElement.clear();71 71 } 72 72 -
trunk/WebCore/wml/WMLGoElement.cpp
r46418 r46510 51 51 void WMLGoElement::registerPostfieldElement(WMLPostfieldElement* postfield) 52 52 { 53 ASSERT(m_postfieldElements.find(postfield) == WTF::notFound); 53 54 m_postfieldElements.append(postfield); 55 } 56 57 void WMLGoElement::deregisterPostfieldElement(WMLPostfieldElement* postfield) 58 { 59 size_t position = m_postfieldElements.find(postfield); 60 ASSERT(position != WTF::notFound); 61 m_postfieldElements.remove(position); 54 62 } 55 63 -
trunk/WebCore/wml/WMLGoElement.h
r39432 r46510 37 37 38 38 void registerPostfieldElement(WMLPostfieldElement*); 39 void deregisterPostfieldElement(WMLPostfieldElement*); 39 40 40 41 virtual void parseMappedAttribute(MappedAttribute*); -
trunk/WebCore/wml/WMLIntrinsicEventHandler.cpp
r39432 r46510 39 39 } 40 40 41 void WMLIntrinsicEventHandler::deregisterIntrinsicEvent(WMLIntrinsicEventType type) 42 { 43 if (m_events.contains(type)) 44 m_events.remove(type); 45 } 46 41 47 void WMLIntrinsicEventHandler::triggerIntrinsicEvent(WMLIntrinsicEventType type) const 42 48 { -
trunk/WebCore/wml/WMLIntrinsicEventHandler.h
r39432 r46510 45 45 46 46 bool registerIntrinsicEvent(WMLIntrinsicEventType, PassRefPtr<WMLIntrinsicEvent>); 47 void deregisterIntrinsicEvent(WMLIntrinsicEventType); 47 48 void triggerIntrinsicEvent(WMLIntrinsicEventType) const; 48 49 bool hasIntrinsicEvent(WMLIntrinsicEventType) const; -
trunk/WebCore/wml/WMLOnEventElement.cpp
r43310 r46510 61 61 } 62 62 63 static inline WMLEventHandlingElement* eventHandlingParent(Node* parent) 64 { 65 ASSERT(parent); 66 if (!parent || !parent->isWMLElement()) 67 return 0; 68 69 return toWMLEventHandlingElement(static_cast<WMLElement*>(parent)); 70 } 71 63 72 void WMLOnEventElement::registerTask(WMLTaskElement* task) 64 73 { … … 67 76 68 77 // Register intrinsic event to the event handler of the owner of onevent element 69 Node* parent = parentNode(); 70 ASSERT(parent); 71 72 if (!parent || !parent->isWMLElement()) 73 return; 74 75 WMLEventHandlingElement* eventHandlingElement = toWMLEventHandlingElement(static_cast<WMLElement*>(parent)); 78 WMLEventHandlingElement* eventHandlingElement = eventHandlingParent(parentNode()); 76 79 if (!eventHandlingElement) 77 80 return; … … 84 87 } 85 88 89 void WMLOnEventElement::deregisterTask(WMLTaskElement*) 90 { 91 WMLEventHandlingElement* eventHandlingElement = eventHandlingParent(parentNode()); 92 if (!eventHandlingElement) 93 return; 94 95 eventHandlingElement->eventHandler()->deregisterIntrinsicEvent(m_type); 96 } 97 86 98 } 87 99 -
trunk/WebCore/wml/WMLOnEventElement.h
r39432 r46510 37 37 38 38 void registerTask(WMLTaskElement*); 39 void deregisterTask(WMLTaskElement*); 39 40 40 41 private: -
trunk/WebCore/wml/WMLPostfieldElement.cpp
r45747 r46510 53 53 } 54 54 55 void WMLPostfieldElement::removedFromDocument() 56 { 57 Node* parent = parentNode(); 58 ASSERT(parent); 59 60 if (parent->hasTagName(goTag)) 61 static_cast<WMLGoElement*>(parent)->deregisterPostfieldElement(this); 62 63 WMLElement::removedFromDocument(); 64 } 65 55 66 String WMLPostfieldElement::name() const 56 67 { -
trunk/WebCore/wml/WMLPostfieldElement.h
r45084 r46510 32 32 33 33 virtual void insertedIntoDocument(); 34 virtual void removedFromDocument(); 34 35 35 36 String name() const; -
trunk/WebCore/wml/WMLSetvarElement.cpp
r45747 r46510 66 66 } 67 67 68 void WMLSetvarElement::removedFromDocument() 69 { 70 Node* parent = parentNode(); 71 ASSERT(parent); 72 73 if (parent && parent->isWMLElement()) { 74 if (static_cast<WMLElement*>(parent)->isWMLTaskElement()) 75 static_cast<WMLTaskElement*>(parent)->deregisterVariableSetter(this); 76 } 77 78 WMLElement::removedFromDocument(); 79 } 80 68 81 String WMLSetvarElement::name() const 69 82 { -
trunk/WebCore/wml/WMLSetvarElement.h
r45084 r46510 34 34 virtual void parseMappedAttribute(MappedAttribute*); 35 35 virtual void insertedIntoDocument(); 36 virtual void removedFromDocument(); 36 37 37 38 String name() const; -
trunk/WebCore/wml/WMLTaskElement.cpp
r46487 r46510 62 62 } 63 63 64 void WMLTaskElement::removedFromDocument() 65 { 66 Node* parent = parentNode(); 67 ASSERT(parent); 68 69 if (parent && parent->isWMLElement()) { 70 if (parent->hasTagName(anchorTag)) 71 static_cast<WMLAnchorElement*>(parent)->deregisterTask(this); 72 else if (parent->hasTagName(doTag)) 73 static_cast<WMLDoElement*>(parent)->deregisterTask(this); 74 else if (parent->hasTagName(oneventTag)) 75 static_cast<WMLOnEventElement*>(parent)->deregisterTask(this); 76 } 77 78 WMLElement::removedFromDocument(); 79 } 80 64 81 void WMLTaskElement::registerVariableSetter(WMLSetvarElement* element) 65 82 { 66 ASSERT(element); 67 m_variableSetterElements.add(element); 83 ASSERT(m_variableSetterElements.find(element) == WTF::notFound); 84 m_variableSetterElements.append(element); 85 } 86 87 void WMLTaskElement::deregisterVariableSetter(WMLSetvarElement* element) 88 { 89 size_t position = m_variableSetterElements.find(element); 90 ASSERT(position != WTF::notFound); 91 m_variableSetterElements.remove(position); 68 92 } 69 93 … … 74 98 75 99 WMLVariableMap variables; 76 HashSet<WMLSetvarElement*>::iterator it = m_variableSetterElements.begin();77 HashSet<WMLSetvarElement*>::iterator end = m_variableSetterElements.end();100 Vector<WMLSetvarElement*>::iterator it = m_variableSetterElements.begin(); 101 Vector<WMLSetvarElement*>::iterator end = m_variableSetterElements.end(); 78 102 79 103 for (; it != end; ++it) { -
trunk/WebCore/wml/WMLTaskElement.h
r39432 r46510 25 25 #include "WMLElement.h" 26 26 27 #include <wtf/ HashSet.h>27 #include <wtf/Vector.h> 28 28 29 29 namespace WebCore { … … 40 40 41 41 virtual void insertedIntoDocument(); 42 virtual void removedFromDocument(); 42 43 virtual void executeTask(Event*) = 0; 43 44 44 45 void registerVariableSetter(WMLSetvarElement*); 46 void deregisterVariableSetter(WMLSetvarElement*); 45 47 46 48 protected: … … 48 50 49 51 private: 50 HashSet<WMLSetvarElement*> m_variableSetterElements;52 Vector<WMLSetvarElement*> m_variableSetterElements; 51 53 }; 52 54 -
trunk/WebCore/wml/WMLTimerElement.cpp
r45084 r46510 69 69 m_card->setIntrinsicEventTimer(this); 70 70 } 71 } 72 73 void WMLTimerElement::removedFromDocument() 74 { 75 Node* parent = parentNode(); 76 ASSERT(parent); 77 78 if (parent && parent->isWMLElement()) { 79 if (parent->hasTagName(cardTag)) { 80 m_card->setIntrinsicEventTimer(0); 81 m_card = 0; 82 } 83 } 84 85 WMLElement::removedFromDocument(); 71 86 } 72 87 -
trunk/WebCore/wml/WMLTimerElement.h
r45084 r46510 36 36 virtual void parseMappedAttribute(MappedAttribute*); 37 37 virtual void insertedIntoDocument(); 38 virtual void removedFromDocument(); 38 39 39 40 void timerFired(Timer<WMLTimerElement>*);
Note: See TracChangeset
for help on using the changeset viewer.