diff options
author | Ben Murdoch <benm@google.com> | 2009-08-11 17:01:47 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2009-08-11 18:21:02 +0100 |
commit | 0bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5 (patch) | |
tree | 2943df35f62d885c89d01063cc528dd73b480fea /WebCore/wml/WMLTaskElement.cpp | |
parent | 7e7a70bfa49a1122b2597a1e6367d89eb4035eca (diff) | |
download | external_webkit-0bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5.zip external_webkit-0bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5.tar.gz external_webkit-0bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5.tar.bz2 |
Merge in WebKit r47029.
Diffstat (limited to 'WebCore/wml/WMLTaskElement.cpp')
-rw-r--r-- | WebCore/wml/WMLTaskElement.cpp | 46 |
1 files changed, 35 insertions, 11 deletions
diff --git a/WebCore/wml/WMLTaskElement.cpp b/WebCore/wml/WMLTaskElement.cpp index 1add1da..d49a03e 100644 --- a/WebCore/wml/WMLTaskElement.cpp +++ b/WebCore/wml/WMLTaskElement.cpp @@ -48,8 +48,6 @@ void WMLTaskElement::insertedIntoDocument() WMLElement::insertedIntoDocument(); Node* parent = parentNode(); - ASSERT(parent); - if (!parent || !parent->isWMLElement()) return; @@ -61,10 +59,32 @@ void WMLTaskElement::insertedIntoDocument() static_cast<WMLOnEventElement*>(parent)->registerTask(this); } +void WMLTaskElement::removedFromDocument() +{ + Node* parent = parentNode(); + if (parent && parent->isWMLElement()) { + if (parent->hasTagName(anchorTag)) + static_cast<WMLAnchorElement*>(parent)->deregisterTask(this); + else if (parent->hasTagName(doTag)) + static_cast<WMLDoElement*>(parent)->deregisterTask(this); + else if (parent->hasTagName(oneventTag)) + static_cast<WMLOnEventElement*>(parent)->deregisterTask(this); + } + + WMLElement::removedFromDocument(); +} + void WMLTaskElement::registerVariableSetter(WMLSetvarElement* element) { - ASSERT(element); - m_variableSetterElements.add(element); + ASSERT(m_variableSetterElements.find(element) == WTF::notFound); + m_variableSetterElements.append(element); +} + +void WMLTaskElement::deregisterVariableSetter(WMLSetvarElement* element) +{ + size_t position = m_variableSetterElements.find(element); + ASSERT(position != WTF::notFound); + m_variableSetterElements.remove(position); } void WMLTaskElement::storeVariableState(WMLPageState* pageState) @@ -73,19 +93,23 @@ void WMLTaskElement::storeVariableState(WMLPageState* pageState) return; WMLVariableMap variables; - HashSet<WMLSetvarElement*>::iterator it = m_variableSetterElements.begin(); - HashSet<WMLSetvarElement*>::iterator end = m_variableSetterElements.end(); + Vector<WMLSetvarElement*>::iterator it = m_variableSetterElements.begin(); + Vector<WMLSetvarElement*>::iterator end = m_variableSetterElements.end(); for (; it != end; ++it) { WMLSetvarElement* setterElement = (*it); - if (setterElement->name().isEmpty()) + + String name = setterElement->name(); + if (name.isEmpty()) continue; - variables.set(setterElement->name(), setterElement->value()); - } + String value = setterElement->value(); + variables.set(name, value); - if (variables.isEmpty()) - return; + // The next setvar element may depend on this variable value. It's safe to store the current + // name value pair in the page state, as the whole page state is replaced soon by this new map + pageState->storeVariable(name, value); + } pageState->storeVariables(variables); } |