diff -r 000000000000 -r dd21522fd290 webengine/osswebengine/WebCore/dom/Node.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webengine/osswebengine/WebCore/dom/Node.h Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,509 @@ +/* + * Copyright (C) 1999 Lars Knoll (knoll@kde.org) + * (C) 1999 Antti Koivisto (koivisto@kde.org) + * (C) 2001 Dirk Mueller (mueller@kde.org) + * Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + */ + +#ifndef Node_h +#define Node_h + +#include "DocPtr.h" +#include "PlatformString.h" +#include "DeprecatedString.h" +#include +#include +#include + +namespace WebCore { + +class AtomicString; +class ContainerNode; +class Document; +class Element; +class Event; +class EventListener; +class IntRect; +class KeyboardEvent; +class NamedAttrMap; +class NodeList; +struct NodeListsNodeData; +class PlatformKeyboardEvent; +class PlatformMouseEvent; +class PlatformWheelEvent; +class QualifiedName; +class RegisteredEventListener; +class RenderArena; +class RenderObject; +class RenderStyle; +class TextStream; + +typedef int ExceptionCode; + +enum StyleChangeType { NoStyleChange, InlineStyleChange, FullStyleChange }; + +// this class implements nodes, which can have a parent but no children: +class Node : public TreeShared { + friend class Document; +public: + enum NodeType { + ELEMENT_NODE = 1, + ATTRIBUTE_NODE = 2, + TEXT_NODE = 3, + CDATA_SECTION_NODE = 4, + ENTITY_REFERENCE_NODE = 5, + ENTITY_NODE = 6, + PROCESSING_INSTRUCTION_NODE = 7, + COMMENT_NODE = 8, + DOCUMENT_NODE = 9, + DOCUMENT_TYPE_NODE = 10, + DOCUMENT_FRAGMENT_NODE = 11, + NOTATION_NODE = 12, + XPATH_NAMESPACE_NODE = 13 + }; + + static bool isSupported(const String& feature, const String& version); + + static void startIgnoringLeaks(); + static void stopIgnoringLeaks(); + + Node(Document*); + virtual ~Node(); + + // DOM methods & attributes for Node + + virtual bool hasTagName(const QualifiedName&) const { return false; } + virtual String nodeName() const = 0; + virtual String nodeValue() const; + virtual void setNodeValue(const String&, ExceptionCode&); + virtual NodeType nodeType() const = 0; + Node* parentNode() const { return parent(); } + Node* parentElement() const { return parent(); } // IE extension + Node* previousSibling() const { return m_previous; } + Node* nextSibling() const { return m_next; } + virtual PassRefPtr childNodes(); + Node* firstChild() const { return virtualFirstChild(); } + Node* lastChild() const { return virtualLastChild(); } + virtual bool hasAttributes() const; + virtual NamedAttrMap* attributes() const; + + virtual String baseURI() const; + + // These should all actually return a node, but this is only important for language bindings, + // which will already know and hold a ref on the right node to return. Returning bool allows + // these methods to be more efficient since they don't need to return a ref + virtual bool insertBefore(PassRefPtr newChild, Node* refChild, ExceptionCode&); + virtual bool replaceChild(PassRefPtr newChild, Node* oldChild, ExceptionCode&); + virtual bool removeChild(Node* child, ExceptionCode&); + virtual bool appendChild(PassRefPtr newChild, ExceptionCode&); + + virtual void remove(ExceptionCode&); + virtual bool hasChildNodes() const; + virtual PassRefPtr cloneNode(bool deep) = 0; + virtual const AtomicString& localName() const; + virtual const AtomicString& namespaceURI() const; + virtual const AtomicString& prefix() const; + virtual void setPrefix(const AtomicString&, ExceptionCode&); + void normalize(); + + bool isSameNode(Node* other) const { return this == other; } + bool isEqualNode(Node*) const; + bool isDefaultNamespace(const String& namespaceURI) const; + String lookupPrefix(const String& namespaceURI) const; + String lookupNamespaceURI(const String& prefix) const; + String lookupNamespacePrefix(const String& namespaceURI, const Element* originalElement) const; + + String textContent(bool convertBRsToNewlines = false) const; + void setTextContent(const String&, ExceptionCode&); + + Node* lastDescendant() const; + Node* firstDescendant() const; + + // Other methods (not part of DOM) + + virtual bool isElementNode() const { return false; } + virtual bool isHTMLElement() const { return false; } +#if ENABLE(SVG) + virtual bool isSVGElement() const { return false; } +#endif + virtual bool isStyledElement() const { return false; } + virtual bool isFrameOwnerElement() const { return false; } + virtual bool isAttributeNode() const { return false; } + virtual bool isTextNode() const { return false; } + virtual bool isCommentNode() const { return false; } + virtual bool isCharacterDataNode() const { return false; } + virtual bool isDocumentNode() const { return false; } + virtual bool isEventTargetNode() const { return false; } + virtual bool isShadowNode() const { return false; } + virtual Node* shadowParentNode() { return 0; } + Node* shadowAncestorNode(); + + // The node's parent for the purpose of event capture and bubbling. + virtual Node* eventParentNode() { return parentNode(); } + + bool isBlockFlow() const; + bool isBlockFlowOrBlockTable() const; + + // Used by
elements to indicate a malformed state of some kind, typically + // used to keep from applying the bottom margin of the form. + virtual bool isMalformed() { return false; } + virtual void setMalformed(bool malformed) { } + + // These low-level calls give the caller responsibility for maintaining the integrity of the tree. + void setPreviousSibling(Node* previous) { m_previous = previous; } + void setNextSibling(Node* next) { m_next = next; } + + // FIXME: These two functions belong in editing -- "atomic node" is an editing concept. + Node* previousNodeConsideringAtomicNodes() const; + Node* nextNodeConsideringAtomicNodes() const; + + /** (Not part of the official DOM) + * Returns the next leaf node. + * + * Using this function delivers leaf nodes as if the whole DOM tree were a linear chain of its leaf nodes. + * @return next leaf node or 0 if there are no more. + */ + Node* nextLeafNode() const; + + /** (Not part of the official DOM) + * Returns the previous leaf node. + * + * Using this function delivers leaf nodes as if the whole DOM tree were a linear chain of its leaf nodes. + * @return previous leaf node or 0 if there are no more. + */ + Node* previousLeafNode() const; + + bool isEditableBlock() const; + Element* enclosingBlockFlowElement() const; + Element* enclosingBlockFlowOrTableElement() const; + Element* enclosingInlineElement() const; + Element* rootEditableElement() const; + + bool inSameContainingBlockFlowElement(Node*); + + // Used by the parser. Checks against the DTD, unlike DOM operations like appendChild(). + // Also does not dispatch DOM mutation events. + // Returns the appropriate container node for future insertions as you parse, or 0 for failure. + virtual ContainerNode* addChild(PassRefPtr); + + // Called by the parser when this element's close tag is reached, + // signalling that all child tags have been parsed and added. + // This is needed for and elements, which can't lay themselves out + // until they know all of their nested s. [Radar 3603191, 4040848]. + // Also used for script elements and some SVG elements for similar purposes, + // but making parsing a special case in this respect should be avoided if possible. + virtual void finishedParsing() { } + + // Called by the frame right before dispatching an unloadEvent. [Radar 4532113] + // This is needed for HTMLInputElements to tell the frame that it is done editing + // (sends textFieldDidEndEditing notification) + virtual void aboutToUnload() { } + + // For and