1635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/** 2635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/) 3635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 4635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * This library is free software; you can redistribute it and/or 5635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * modify it under the terms of the GNU Library General Public 6635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * License as published by the Free Software Foundation; either 7635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * version 2 of the License, or (at your option) any later version. 8635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 9635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * This library is distributed in the hope that it will be useful, 10635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of 11635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Library General Public License for more details. 13635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 14635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * You should have received a copy of the GNU Library General Public License 15635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * along with this library; see the file COPYING.LIB. If not, write to 16635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 17635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Boston, MA 02110-1301, USA. 18635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 19635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */ 20635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 21635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "config.h" 22635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 23635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if ENABLE(WML) 24635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WMLTaskElement.h" 25635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 26635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WMLAnchorElement.h" 27635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WMLDoElement.h" 28635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WMLNames.h" 29635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WMLOnEventElement.h" 30635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WMLPageState.h" 31635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WMLSetvarElement.h" 32635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 33635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectnamespace WebCore { 34635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 35635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectusing namespace WMLNames; 36635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 37635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectWMLTaskElement::WMLTaskElement(const QualifiedName& tagName, Document* doc) 38635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project : WMLElement(tagName, doc) 39635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 40635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 41635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 42635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectWMLTaskElement::~WMLTaskElement() 43635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 44635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 45635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 46635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid WMLTaskElement::insertedIntoDocument() 47635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 48635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project WMLElement::insertedIntoDocument(); 49635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 50635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project Node* parent = parentNode(); 51635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!parent || !parent->isWMLElement()) 52635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return; 53635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 54635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (parent->hasTagName(anchorTag)) 55635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project static_cast<WMLAnchorElement*>(parent)->registerTask(this); 56635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project else if (parent->hasTagName(doTag)) 57635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project static_cast<WMLDoElement*>(parent)->registerTask(this); 58635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project else if (parent->hasTagName(oneventTag)) 59635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project static_cast<WMLOnEventElement*>(parent)->registerTask(this); 60635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 61635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid WMLTaskElement::removedFromDocument() 630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Node* parent = parentNode(); 650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (parent && parent->isWMLElement()) { 660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (parent->hasTagName(anchorTag)) 670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch static_cast<WMLAnchorElement*>(parent)->deregisterTask(this); 680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch else if (parent->hasTagName(doTag)) 690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch static_cast<WMLDoElement*>(parent)->deregisterTask(this); 700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch else if (parent->hasTagName(oneventTag)) 710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch static_cast<WMLOnEventElement*>(parent)->deregisterTask(this); 720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch WMLElement::removedFromDocument(); 750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 77635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid WMLTaskElement::registerVariableSetter(WMLSetvarElement* element) 78635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ASSERT(m_variableSetterElements.find(element) == WTF::notFound); 800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_variableSetterElements.append(element); 810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid WMLTaskElement::deregisterVariableSetter(WMLSetvarElement* element) 840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch size_t position = m_variableSetterElements.find(element); 860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ASSERT(position != WTF::notFound); 870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_variableSetterElements.remove(position); 88635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 89635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 90635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid WMLTaskElement::storeVariableState(WMLPageState* pageState) 91635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 92635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!pageState || m_variableSetterElements.isEmpty()) 93635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return; 94635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 95635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project WMLVariableMap variables; 960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Vector<WMLSetvarElement*>::iterator it = m_variableSetterElements.begin(); 970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Vector<WMLSetvarElement*>::iterator end = m_variableSetterElements.end(); 98635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 99635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project for (; it != end; ++it) { 100635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project WMLSetvarElement* setterElement = (*it); 1010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch String name = setterElement->name(); 1030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (name.isEmpty()) 104635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project continue; 105635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch String value = setterElement->value(); 1070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch variables.set(name, value); 108635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // The next setvar element may depend on this variable value. It's safe to store the current 1100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // name value pair in the page state, as the whole page state is replaced soon by this new map 1110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch pageState->storeVariable(name, value); 1120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 113635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 114635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project pageState->storeVariables(variables); 115635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 116635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 117635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 118635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 119635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 120