15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (C) 1999 Antti Koivisto (koivisto@kde.org) 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (C) 2001 Dirk Mueller (mueller@kde.org) 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved. 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/) 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is free software; you can redistribute it and/or 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modify it under the terms of the GNU Library General Public 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License as published by the Free Software Foundation; either 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version 2 of the License, or (at your option) any later version. 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is distributed in the hope that it will be useful, 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * but WITHOUT ANY WARRANTY; without even the implied warranty of 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Library General Public License for more details. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * You should have received a copy of the GNU Library General Public License 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * along with this library; see the file COPYING.LIB. If not, write to 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Boston, MA 02110-1301, USA. 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef Node_h 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define Node_h 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "bindings/v8/ScriptWrappable.h" 2953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/EventTarget.h" 3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/MutationObserver.h" 3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/SimulatedClickOptions.h" 3253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/TreeScope.h" 3353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/editing/EditingBoundary.h" 345267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "core/inspector/InspectorCounters.h" 3553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/TreeShared.h" 3653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/graphics/LayoutRect.h" 3753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/style/RenderStyleConstants.h" 38521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)#include "weborigin/KURLHash.h" 39e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/Forward.h" 40e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/ListHashSet.h" 41e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/text/AtomicString.h" 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// This needs to be here because Document.h also depends on it. 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define DUMP_NODE_STATISTICS 0 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore { 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Attribute; 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ClassNodeList; 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ContainerNode; 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class DOMSettableTokenList; 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Document; 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Element; 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Event; 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class EventContext; 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class EventDispatchMediator; 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class EventListener; 58df95704c49daea886ddad70775bda23618d6274dBen Murdochclass ExceptionState; 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class FloatPoint; 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Frame; 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class HTMLInputElement; 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class IntRect; 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class KeyboardEvent; 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class NSResolver; 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class NamedNodeMap; 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class NameNodeList; 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class NodeList; 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class NodeListsNodeData; 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class NodeRareData; 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class NodeRenderingContext; 7153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)class PlatformGestureEvent; 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class PlatformKeyboardEvent; 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class PlatformMouseEvent; 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class PlatformWheelEvent; 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class QualifiedName; 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class RadioNodeList; 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class RegisteredEventListener; 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class RenderBox; 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class RenderBoxModelObject; 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class RenderObject; 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class RenderStyle; 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ShadowRoot; 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class TagNodeList; 84926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)class TouchEvent; 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 86e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochconst int nodeStyleChangeShift = 14; 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 88e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)enum StyleChangeType { 89e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) NoStyleChange = 0, 90e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch LocalStyleChange = 1 << nodeStyleChangeShift, 91e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch SubtreeStyleChange = 2 << nodeStyleChangeShift, 92df95704c49daea886ddad70775bda23618d6274dBen Murdoch LazyAttachStyleChange = 3 << nodeStyleChangeShift, 93e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch}; 94591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 95e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch// If the style change is from the renderer then we'll call setStyle on the 96e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch// renderer even if the style computed from CSS is identical. 97e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochenum StyleChangeSource { 98e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch StyleChangeFromCSS, 99e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch StyleChangeFromRenderer 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class NodeRareDataBase { 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderObject* renderer() const { return m_renderer; } 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setRenderer(RenderObject* renderer) { m_renderer = renderer; } 106926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)protected: 108926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) NodeRareDataBase(RenderObject* renderer) 109926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) : m_renderer(renderer) 110926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { } 111926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderObject* m_renderer; 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 116926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)enum AttachBehavior { 117926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) AttachNow, 118926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) AttachLazily, 119926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}; 120926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 121926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)class Node : public EventTarget, public ScriptWrappable, public TreeShared<Node> { 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) friend class Document; 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) friend class TreeScope; 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) friend class TreeScopeAdopter; 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) enum NodeType { 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ELEMENT_NODE = 1, 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ATTRIBUTE_NODE = 2, 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) TEXT_NODE = 3, 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) CDATA_SECTION_NODE = 4, 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ENTITY_NODE = 6, 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PROCESSING_INSTRUCTION_NODE = 7, 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) COMMENT_NODE = 8, 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DOCUMENT_NODE = 9, 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DOCUMENT_TYPE_NODE = 10, 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DOCUMENT_FRAGMENT_NODE = 11, 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) NOTATION_NODE = 12, 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) XPATH_NAMESPACE_NODE = 13, 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 14181a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 14281a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // EntityReference nodes are deprecated and impossible to create in WebKit. 14381a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // We want Node.ENTITY_REFERNCE_NODE to exist in JS and this enum, makes the bindings 14481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // generation not complain about ENTITY_REFERENCE_NODE being missing from the implementation 14581a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // while not requiring all switch(NodeType) blocks to include this deprecated constant. 14681a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) enum DeprecatedNodeType { 14781a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) ENTITY_REFERENCE_NODE = 5 14881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) }; 14981a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) enum DocumentPosition { 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DOCUMENT_POSITION_EQUIVALENT = 0x00, 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DOCUMENT_POSITION_DISCONNECTED = 0x01, 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DOCUMENT_POSITION_PRECEDING = 0x02, 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DOCUMENT_POSITION_FOLLOWING = 0x04, 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DOCUMENT_POSITION_CONTAINS = 0x08, 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DOCUMENT_POSITION_CONTAINED_BY = 0x10, 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20, 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1605267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // All Nodes are placed in their own heap partition for security. 1615267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // See http://crbug.com/246860 for detail. 1625267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) void* operator new(size_t); 1635267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) void operator delete(void*); 1645267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static bool isSupported(const String& feature, const String& version); 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static void dumpStatistics(); 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16802772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch enum StyleChange { NoChange, NoInherit, Inherit, Detach, Force }; 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static StyleChange diff(const RenderStyle*, const RenderStyle*, Document*); 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual ~Node(); 17253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) void willBeDeletedFrom(Document*); 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // DOM methods & attributes for Node 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasTagName(const QualifiedName&) const; 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasLocalName(const AtomicString&) const; 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual String nodeName() const = 0; 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual String nodeValue() const; 180e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch virtual void setNodeValue(const String&); 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual NodeType nodeType() const = 0; 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ContainerNode* parentNode() const; 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Element* parentElement() const; 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Node* previousSibling() const { return m_previous; } 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Node* nextSibling() const { return m_next; } 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PassRefPtr<NodeList> childNodes(); 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Node* firstChild() const; 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Node* lastChild() const; 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasAttributes() const; 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) NamedNodeMap* attributes() const; 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 192e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) // ChildNode interface API 193e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) Element* previousElementSibling() const; 194e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) Element* nextElementSibling() const; 195df95704c49daea886ddad70775bda23618d6274dBen Murdoch void remove(ExceptionState&); 196e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 19753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) Node* pseudoAwareNextSibling() const; 19853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) Node* pseudoAwarePreviousSibling() const; 19953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) Node* pseudoAwareFirstChild() const; 20053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) Node* pseudoAwareLastChild() const; 20153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual KURL baseURI() const; 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // These should all actually return a node, but this is only important for language bindings, 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // which will already know and hold a ref on the right node to return. Returning bool allows 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // these methods to be more efficient since they don't need to return a ref 207df95704c49daea886ddad70775bda23618d6274dBen Murdoch void insertBefore(PassRefPtr<Node> newChild, Node* refChild, ExceptionState&, AttachBehavior = AttachNow); 208df95704c49daea886ddad70775bda23618d6274dBen Murdoch void replaceChild(PassRefPtr<Node> newChild, Node* oldChild, ExceptionState&, AttachBehavior = AttachNow); 209df95704c49daea886ddad70775bda23618d6274dBen Murdoch void removeChild(Node* child, ExceptionState&); 210df95704c49daea886ddad70775bda23618d6274dBen Murdoch void appendChild(PassRefPtr<Node> newChild, ExceptionState&, AttachBehavior = AttachNow); 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasChildNodes() const { return firstChild(); } 213e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch virtual PassRefPtr<Node> cloneNode(bool deep = true) = 0; 21493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) virtual const AtomicString& localName() const; 21593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) virtual const AtomicString& namespaceURI() const; 21693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) virtual const AtomicString& prefix() const; 217df95704c49daea886ddad70775bda23618d6274dBen Murdoch virtual void setPrefix(const AtomicString&, ExceptionState&); 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void normalize(); 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isSameNode(Node* other) const { return this == other; } 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isEqualNode(Node*) const; 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isDefaultNamespace(const AtomicString& namespaceURI) const; 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String lookupPrefix(const AtomicString& namespaceURI) const; 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String lookupNamespaceURI(const String& prefix) const; 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String lookupNamespacePrefix(const AtomicString& namespaceURI, const Element* originalElement) const; 22602772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String textContent(bool convertBRsToNewlines = false) const; 228df95704c49daea886ddad70775bda23618d6274dBen Murdoch void setTextContent(const String&, ExceptionState&); 22902772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Node* lastDescendant() const; 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Node* firstDescendant() const; 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Other methods (not part of DOM) 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isElementNode() const { return getFlag(IsElementFlag); } 2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isContainerNode() const { return getFlag(IsContainerFlag); } 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isTextNode() const { return getFlag(IsTextFlag); } 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isHTMLElement() const { return getFlag(IsHTMLFlag); } 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isSVGElement() const { return getFlag(IsSVGFlag); } 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 241926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isPseudoElement() const { return pseudoId() != NOPSEUDO; } 242926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isBeforePseudoElement() const { return pseudoId() == BEFORE; } 243926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isAfterPseudoElement() const { return pseudoId() == AFTER; } 244926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) PseudoId pseudoId() const { return (isElementNode() && hasCustomStyleCallbacks()) ? customPseudoId() : NOPSEUDO; } 245926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 2467757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch enum CustomElementState { 2477757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch NotCustomElement, 2487757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch UpgradeCandidate, 2497757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch Defined, 2507757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch Upgraded 2517757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch }; 2527757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool isCustomElement() const { return customElementState() != NotCustomElement; } 2537757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch CustomElementState customElementState() const { return CustomElementState((getFlag(CustomElementHasDefinitionOrIsUpgraded) ? 2 : 0) | (getFlag(CustomElementIsUpgradeCandidateOrUpgraded) ? 1 : 0)); } 2547757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void setCustomElementState(CustomElementState newState); 25553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isMediaControlElement() const { return false; } 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isMediaControls() const { return false; } 258926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual bool isWebVTTElement() const { return false; } 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isAttributeNode() const { return false; } 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isCharacterDataNode() const { return false; } 2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isFrameOwnerElement() const { return false; } 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isPluginElement() const { return false; } 263926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 264e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // StyledElements allow inline style (style="border: 1px"), presentational attributes (ex. color), 265e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // class names (ex. class="foo bar") and other non-basic styling features. They and also control 266e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // if this element can participate in style sharing. 267e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // 268e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // FIXME: The only things that ever go through StyleResolver that aren't StyledElements are 269e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // PseudoElements and WebVTTElements. It's possible we can just eliminate all the checks 270e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // since those elements will never have class names, inline style, or other things that 271e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // this apparently guards against. 272e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch bool isStyledElement() const { return isHTMLElement() || isSVGElement(); } 273e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isDocumentNode() const; 275926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isTreeScope() const { return treeScope()->rootNode() == this; } 276926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isDocumentFragment() const { return getFlag(IsDocumentFragmentFlag); } 277926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isShadowRoot() const { return isDocumentFragment() && isTreeScope(); } 278521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) bool isInsertionPoint() const { return getFlag(IsInsertionPointFlag); } 279926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool inNamedFlow() const { return getFlag(InNamedFlowFlag); } 281926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool hasCustomStyleCallbacks() const { return getFlag(HasCustomStyleCallbacksFlag); } 2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 283591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch bool isRegisteredWithNamedFlow() const; 284591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasSyntheticAttrChildNodes() const { return getFlag(HasSyntheticAttrChildNodesFlag); } 2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setHasSyntheticAttrChildNodes(bool flag) { setFlag(flag, HasSyntheticAttrChildNodesFlag); } 2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If this node is in a shadow tree, returns its shadow host. Otherwise, returns 0. 2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Element* shadowHost() const; 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If this node is in a shadow tree, returns its shadow host. Otherwise, returns this. 2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Deprecated. Should use shadowHost() and check the return value. 292926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) Node* deprecatedShadowAncestorNode() const; 293926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ShadowRoot* containingShadowRoot() const; 2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ShadowRoot* youngestShadowRoot() const; 2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Returns 0, a child of ShadowRoot, or a legacy shadow root. 2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Node* nonBoundaryShadowTreeRootNode(); 298926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Node's parent, shadow tree host. 300926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ContainerNode* parentOrShadowHostNode() const; 301926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) Element* parentOrShadowHostElement() const; 302926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void setParentOrShadowHostNode(ContainerNode*); 3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Node* highestAncestor() const; 3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Use when it's guaranteed to that shadowHost is 0. 3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ContainerNode* parentNodeGuaranteedHostFree() const; 3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Returns the parent node, but 0 if the parent node is a ShadowRoot. 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ContainerNode* nonShadowBoundaryParentNode() const; 3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool selfOrAncestorHasDirAutoAttribute() const { return getFlag(SelfOrAncestorHasDirAutoFlag); } 3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setSelfOrAncestorHasDirAutoAttribute(bool flag) { setFlag(flag, SelfOrAncestorHasDirAutoFlag); } 3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Returns the enclosing event parent node (or self) that, when clicked, would trigger a navigation. 3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Node* enclosingLinkEventParentOrSelf(); 3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 31653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) bool isBlockFlowElement() const; 3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // These low-level calls give the caller responsibility for maintaining the integrity of the tree. 3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setPreviousSibling(Node* previous) { m_previous = previous; } 3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setNextSibling(Node* next) { m_next = next; } 3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool canContainRangeEndPoint() const { return false; } 3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: These two functions belong in editing -- "atomic node" is an editing concept. 3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Node* previousNodeConsideringAtomicNodes() const; 3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Node* nextNodeConsideringAtomicNodes() const; 32702772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Returns the next leaf node or 0 if there are no more. 3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Delivers leaf nodes as if the whole DOM tree were a linear chain of its leaf nodes. 3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Uses an editing-specific concept of what a leaf node is, and should probably be moved 3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // out of the Node class into an editing-specific source file. 3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Node* nextLeafNode() const; 3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Returns the previous leaf node or 0 if there are no more. 3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Delivers leaf nodes as if the whole DOM tree were a linear chain of its leaf nodes. 3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Uses an editing-specific concept of what a leaf node is, and should probably be moved 3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // out of the Node class into an editing-specific source file. 3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Node* previousLeafNode() const; 3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // enclosingBlockFlowElement() is deprecated. Use enclosingBlock instead. 3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Element* enclosingBlockFlowElement() const; 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isRootEditableElement() const; 3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Element* rootEditableElement() const; 3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Element* rootEditableElement(EditableType) const; 3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool inSameContainingBlockFlowElement(Node*); 3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Called by the parser when this element's close tag is reached, 3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // signaling that all child tags have been parsed and added. 3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // This is needed for <applet> and <object> elements, which can't lay themselves out 3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // until they know all of their nested <param>s. [Radar 3603191, 4040848]. 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Also used for script elements and some SVG elements for similar purposes, 3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // but making parsing a special case in this respect should be avoided if possible. 3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void finishParsingChildren() { } 3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void beginParsingChildren() { } 3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // For <link> and <style> elements. 3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool sheetLoaded() { return true; } 3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void notifyLoadedSheetAndAllCriticalSubresources(bool /* error loading subresource */) { } 3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void startLoadingDynamicSheet() { ASSERT_NOT_REACHED(); } 3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 363926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool hasName() const { return !isTextNode() && getFlag(HasNameOrIsEditingTextFlag); } 3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasID() const; 3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasClass() const; 3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 367926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isUserActionElement() const { return getFlag(IsUserActionElement); } 368926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void setUserActionElement(bool flag) { setFlag(flag, IsUserActionElement); } 369926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 370926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool active() const { return isUserActionElement() && isUserActionElementActive(); } 371926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool inActiveChain() const { return isUserActionElement() && isUserActionElementInActiveChain(); } 372926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool hovered() const { return isUserActionElement() && isUserActionElementHovered(); } 373926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool focused() const { return isUserActionElement() && isUserActionElementFocused(); } 374926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool attached() const { return getFlag(IsAttachedFlag); } 3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setAttached() { setFlag(IsAttachedFlag); } 3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool needsStyleRecalc() const { return styleChangeType() != NoStyleChange; } 3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) StyleChangeType styleChangeType() const { return static_cast<StyleChangeType>(m_nodeFlags & StyleChangeMask); } 3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool childNeedsStyleRecalc() const { return getFlag(ChildNeedsStyleRecalcFlag); } 3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isLink() const { return getFlag(IsLinkFlag); } 381926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isEditingText() const { return isTextNode() && getFlag(HasNameOrIsEditingTextFlag); } 3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 383926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void setHasName(bool f) { ASSERT(!isTextNode()); setFlag(f, HasNameOrIsEditingTextFlag); } 3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setChildNeedsStyleRecalc() { setFlag(ChildNeedsStyleRecalcFlag); } 3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void clearChildNeedsStyleRecalc() { clearFlag(ChildNeedsStyleRecalcFlag); } 3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 387e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch void setNeedsStyleRecalc(StyleChangeType = SubtreeStyleChange, StyleChangeSource = StyleChangeFromCSS); 388591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch void clearNeedsStyleRecalc() 389591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 390591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch m_nodeFlags &= ~StyleChangeMask; 391e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch clearFlag(NotifyRendererWithIdenticalStyles); 392591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } 393591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 394f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) bool childNeedsDistributionRecalc() const { return getFlag(ChildNeedsDistributionRecalc); } 395f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) void setChildNeedsDistributionRecalc() { setFlag(ChildNeedsDistributionRecalc); } 396f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) void clearChildNeedsDistributionRecalc() { clearFlag(ChildNeedsDistributionRecalc); } 397f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) void markAncestorsWithChildNeedsDistributionRecalc(); 398f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 399f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) void recalcDistribution(); 400f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 401e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch bool shouldNotifyRendererWithIdenticalStyles() const { return getFlag(NotifyRendererWithIdenticalStyles); } 4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setIsLink(bool f) { setFlag(f, IsLinkFlag); } 4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setIsLink() { setFlag(IsLinkFlag); } 4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void clearIsLink() { clearFlag(IsLinkFlag); } 4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setInNamedFlow() { setFlag(InNamedFlowFlag); } 4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void clearInNamedFlow() { clearFlag(InNamedFlowFlag); } 4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasScopedHTMLStyleChild() const { return getFlag(HasScopedHTMLStyleChildFlag); } 4115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setHasScopedHTMLStyleChild(bool flag) { setFlag(flag, HasScopedHTMLStyleChildFlag); } 4125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasEventTargetData() const { return getFlag(HasEventTargetDataFlag); } 4145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setHasEventTargetData(bool flag) { setFlag(flag, HasEventTargetDataFlag); } 4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 416926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isV8CollectableDuringMinorGC() const { return getFlag(V8CollectableDuringMinorGCFlag); } 417926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void setV8CollectableDuringMinorGC(bool flag) { setFlag(flag, V8CollectableDuringMinorGCFlag); } 418926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 4195267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) enum ShouldSetAttached { 4205267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) SetAttached, 4215267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) DoNotSetAttached 4225267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) }; 4235267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) void lazyAttach(ShouldSetAttached = SetAttached); 4245267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) void lazyReattach(ShouldSetAttached = SetAttached); 4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 426926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual void setFocus(bool flag); 427926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual void setActive(bool flag = true, bool pause = false); 428926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual void setHovered(bool flag = true); 4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual short tabIndex() const; 4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual Node* focusDelegate(); 433591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch // This is called only when the node is focused. 434591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch virtual bool shouldHaveFocusAppearance() const; 4355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) enum UserSelectAllTreatment { 4375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) UserSelectAllDoesNotAffectEditability, 4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) UserSelectAllIsAlwaysNonEditable 4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isContentEditable(UserSelectAllTreatment = UserSelectAllDoesNotAffectEditability); 4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isContentRichlyEditable(); 4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool rendererIsEditable(EditableType editableType = ContentIsEditable, UserSelectAllTreatment treatment = UserSelectAllIsAlwaysNonEditable) const 4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (editableType) { 4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case ContentIsEditable: 4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return rendererIsEditable(Editable, treatment); 4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case HasEditableAXRole: 4495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return isEditableToAccessibility(Editable); 4505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT_NOT_REACHED(); 4525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool rendererIsRichlyEditable(EditableType editableType = ContentIsEditable) const 4565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (editableType) { 4585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case ContentIsEditable: 4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return rendererIsEditable(RichlyEditable, UserSelectAllIsAlwaysNonEditable); 4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case HasEditableAXRole: 4615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return isEditableToAccessibility(RichlyEditable); 4625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT_NOT_REACHED(); 4645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 4655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool shouldUseInputMethod(); 4685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual LayoutRect boundingBox() const; 4695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntRect pixelSnappedBoundingBox() const { return pixelSnappedIntRect(boundingBox()); } 4705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutRect renderRect(bool* isReplaced); 4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntRect pixelSnappedRenderRect(bool* isReplaced) { return pixelSnappedIntRect(renderRect(isReplaced)); } 4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Returns true if the node has a non-empty bounding box in layout. 4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // This does not 100% guarantee the user can see it, but is pretty close. 4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Note: This method only works properly after layout has occurred. 4765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasNonEmptyBoundingBox() const; 4775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned nodeIndex() const; 4795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 48002772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch // Returns the DOM ownerDocument attribute. This method never returns NULL, except in the case 48102772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch // of (1) a Document node or (2) a DocumentType node that is not used with any Document yet. 4825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Document* ownerDocument() const; 4835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 48402772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch // Returns the document associated with this node. This method never returns NULL, except in the case 4855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // of a DocumentType node that is not used with any Document yet. A Document node returns itself. 4865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Document* document() const 4875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(this); 4895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: below ASSERT is useful, but prevents the use of document() in the constructor or destructor 4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // due to the virtual function call to nodeType(). 4915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(documentInternal() || (nodeType() == DOCUMENT_TYPE_NODE && !inDocument())); 4925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return documentInternal(); 4935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 495926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) TreeScope* treeScope() const { return m_treeScope; } 4965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Returns true if this node is associated with a document and is in its associated document's 4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // node tree, false otherwise. 49902772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch bool inDocument() const 50002772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch { 501926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ASSERT(documentInternal() || !getFlag(InDocumentFlag)); 5025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return getFlag(InDocumentFlag); 5035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 504926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isInShadowTree() const { return getFlag(IsInShadowTreeFlag); } 505926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isInTreeScope() const { return getFlag(static_cast<NodeFlags>(InDocumentFlag | IsInShadowTreeFlag)); } 5065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 507926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isDocumentTypeNode() const { return nodeType() == DOCUMENT_TYPE_NODE; } 5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool childTypeAllowed(NodeType) const { return false; } 5095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned childNodeCount() const; 5105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Node* childNode(unsigned index) const; 5115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 512df95704c49daea886ddad70775bda23618d6274dBen Murdoch void checkSetPrefix(const AtomicString& prefix, ExceptionState&); 5135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isDescendantOf(const Node*) const; 5145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool contains(const Node*) const; 515926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool containsIncludingShadowDOM(const Node*) const; 516926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool containsIncludingHostElements(const Node*) const; 5175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 518f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) // FIXME: Remove this when crbug.com/265716 cleans up contains semantics. 519f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) bool bindingsContains(const Node* node) const { return containsIncludingShadowDOM(node); } 520f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 5215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Used to determine whether range offsets use characters or node indices. 5225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool offsetInCharacters() const; 5235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Number of DOM 16-bit units contained in node. Note that rendered text length can be different - e.g. because of 5245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // css-transform:capitalize breaking up precomposed characters and ligatures. 5255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual int maxCharacterOffset() const; 5265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Whether or not a selection can be started in this object 5285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool canStartSelection() const; 5295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Getting points into and out of screen space 5315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FloatPoint convertToPage(const FloatPoint&) const; 5325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FloatPoint convertFromPage(const FloatPoint&) const; 5335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // ----------------------------------------------------------------------------- 5355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Integration with rendering tree 5365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // As renderer() includes a branch you should avoid calling it repeatedly in hot code paths. 5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderObject* renderer() const { return hasRareData() ? m_data.m_rareData->renderer() : m_data.m_renderer; }; 5395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setRenderer(RenderObject* renderer) 5405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 5415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (hasRareData()) 5425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_data.m_rareData->setRenderer(renderer); 5435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 5445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_data.m_renderer = renderer; 5455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Use these two methods with caution. 5485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderBox* renderBox() const; 5495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderBoxModelObject* renderBoxModelObject() const; 5505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 551521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) struct AttachContext { 552521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) RenderStyle* resolvedStyle; 553521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) bool performingReattach; 554521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) 555521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) AttachContext() : resolvedStyle(0), performingReattach(false) { } 556521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) }; 557521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) 5585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Attaches this node to the rendering tree. This calculates the style to be applied to the node and creates an 5595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // appropriate RenderObject which will be inserted into the tree (except when the style has display: none). This 5605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // makes the node visible in the FrameView. 561521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) virtual void attach(const AttachContext& = AttachContext()); 5625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Detaches the node from the rendering tree, making it invisible in the rendered view. This method will remove 5645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // the node's rendering object from the rendering tree and delete it. 565521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) virtual void detach(const AttachContext& = AttachContext()); 5665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef NDEBUG 5685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool inDetach() const; 5695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 5705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 571521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) void reattach(const AttachContext& = AttachContext()); 57293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) void lazyReattachIfAttached(); 573e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 5745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Wrapper for nodes that don't have a renderer, but still cache the style (like HTMLOptionElement). 5755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderStyle* renderStyle() const; 57683750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch RenderStyle* parentRenderStyle() const; 5775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderStyle* computedStyle(PseudoId pseudoElementSpecifier = NOPSEUDO) { return virtualComputedStyle(pseudoElementSpecifier); } 5795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // ----------------------------------------------------------------------------- 5815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Notification of document structure changes (see ContainerNode.h for more notification methods) 5825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // 5835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // At first, WebKit notifies the node that it has been inserted into the document. This is called during document parsing, and also 5845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // when a node is added through the DOM methods insertBefore(), appendChild() or replaceChild(). The call happens _after_ the node has been added to the tree. 5855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // This is similar to the DOMNodeInsertedIntoDocument DOM event, but does not require the overhead of event 5865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // dispatching. 5875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // 5885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // WebKit notifies this callback regardless if the subtree of the node is a document tree or a floating subtree. 5895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Implementation can determine the type of subtree by seeing insertionPoint->inDocument(). 5905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // For a performance reason, notifications are delivered only to ContainerNode subclasses if the insertionPoint is out of document. 5915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // 5925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // There are another callback named didNotifyDescendantInsertions(), which is called after all the descendant is notified. 5935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Only a few subclasses actually need this. To utilize this, the node should return InsertionShouldCallDidNotifyDescendantInsertions 5945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // from insrtedInto(). 5955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // 5965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) enum InsertionNotificationRequest { 5975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) InsertionDone, 5985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) InsertionShouldCallDidNotifySubtreeInsertions 5995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 6005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual InsertionNotificationRequest insertedInto(ContainerNode* insertionPoint); 6025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void didNotifySubtreeInsertions(ContainerNode*) { } 6035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Notifies the node that it is no longer part of the tree. 6055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // 6065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // This is a dual of insertedInto(), and is similar to the DOMNodeRemovedFromDocument DOM event, but does not require the overhead of event 6075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // dispatching, and is called _after_ the node is removed from the tree. 6085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // 6095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void removedFrom(ContainerNode* insertionPoint); 6105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef NDEBUG 61253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) String debugName() const; 61353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 6145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void formatForDebugger(char* buffer, unsigned length) const; 6155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void showNode(const char* prefix = "") const; 6175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void showTreeForThis() const; 6185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void showNodePathForThis() const; 6195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void showTreeAndMark(const Node* markedNode1, const char* markedLabel1, const Node* markedNode2 = 0, const char* markedLabel2 = 0) const; 6205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void showTreeForThisAcrossFrame() const; 6215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 6225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void invalidateNodeListCachesInAncestors(const QualifiedName* attrName = 0, Element* attributeOwnerElement = 0); 6245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) NodeListsNodeData* nodeLists(); 625926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void clearNodeLists(); 6265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PassRefPtr<NodeList> getElementsByTagName(const AtomicString&); 6285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PassRefPtr<NodeList> getElementsByTagNameNS(const AtomicString& namespaceURI, const AtomicString& localName); 6295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PassRefPtr<NodeList> getElementsByName(const String& elementName); 6305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PassRefPtr<NodeList> getElementsByClassName(const String& classNames); 6315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PassRefPtr<RadioNodeList> radioNodeList(const AtomicString&); 6325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool willRespondToMouseMoveEvents(); 6345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool willRespondToMouseClickEvents(); 6355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool willRespondToTouchEvents(); 6365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 637df95704c49daea886ddad70775bda23618d6274dBen Murdoch PassRefPtr<Element> querySelector(const AtomicString& selectors, ExceptionState&); 638df95704c49daea886ddad70775bda23618d6274dBen Murdoch PassRefPtr<NodeList> querySelectorAll(const AtomicString& selectors, ExceptionState&); 6395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6405267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) unsigned short compareDocumentPosition(const Node*) const; 6415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 64253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) enum ShadowTreesTreatment { 64353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) TreatShadowTreesAsDisconnected, 64453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) TreatShadowTreesAsComposed 64553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }; 64653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 6475267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) unsigned short compareDocumentPositionInternal(const Node*, ShadowTreesTreatment) const; 64853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 6495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual Node* toNode(); 6505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual const AtomicString& interfaceName() const; 6525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual ScriptExecutionContext* scriptExecutionContext() const; 6535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool addEventListener(const AtomicString& eventType, PassRefPtr<EventListener>, bool useCapture); 6555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool removeEventListener(const AtomicString& eventType, EventListener*, bool useCapture); 6565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Handlers to do/undo actions on the target node before an event is dispatched to it and after the event 6585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // has been dispatched. The data pointer is handed back by the preDispatch and passed to postDispatch. 6595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void* preDispatchEventHandler(Event*) { return 0; } 6605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void postDispatchEventHandler(Event*, void* /*dataFromPreDispatch*/) { } 6615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) using EventTarget::dispatchEvent; 663926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual bool dispatchEvent(PassRefPtr<Event>) OVERRIDE; 664926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 6655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void dispatchScopedEvent(PassRefPtr<Event>); 6665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void dispatchScopedEventDispatchMediator(PassRefPtr<EventDispatchMediator>); 6675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void handleLocalEvents(Event*); 6695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void dispatchSubtreeModifiedEvent(); 6715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool dispatchDOMActivateEvent(int detail, PassRefPtr<Event> underlyingEvent); 6725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool dispatchKeyEvent(const PlatformKeyboardEvent&); 6745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool dispatchWheelEvent(const PlatformWheelEvent&); 6755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool dispatchMouseEvent(const PlatformMouseEvent&, const AtomicString& eventType, int clickCount = 0, Node* relatedTarget = 0); 6765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool dispatchGestureEvent(const PlatformGestureEvent&); 677926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool dispatchTouchEvent(PassRefPtr<TouchEvent>); 678926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 679926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void dispatchSimulatedClick(Event* underlyingEvent, SimulatedClickMouseEventOptions = SendNoEvents, SimulatedClickVisualOptions = ShowPressedLook); 6805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 68153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) virtual bool dispatchBeforeLoadEvent(const String& sourceURL); 6825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void dispatchChangeEvent(); 6835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void dispatchInputEvent(); 6845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Perform the default action for an event. 6865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void defaultEventHandler(Event*); 687591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch virtual void willCallDefaultEventHandler(const Event&); 6885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 689926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) using TreeShared<Node>::ref; 690926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) using TreeShared<Node>::deref; 6915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual EventTargetData* eventTargetData(); 6935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual EventTargetData* ensureEventTargetData(); 6945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void getRegisteredMutationObserversOfType(HashMap<MutationObserver*, MutationRecordDeliveryOptions>&, MutationObserver::MutationType, const QualifiedName* attributeName); 6965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void registerMutationObserver(MutationObserver*, MutationObserverOptions, const HashSet<AtomicString>& attributeFilter); 6975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void unregisterMutationObserver(MutationObserverRegistration*); 6985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void registerTransientMutationObserver(MutationObserverRegistration*); 6995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void unregisterTransientMutationObserver(MutationObserverRegistration*); 7005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void notifyMutationObserversNodeWillDetach(); 7015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void registerScopedHTMLStyleChild(); 7035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void unregisterScopedHTMLStyleChild(); 7045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) size_t numberOfScopedHTMLStyleChildren() const; 7055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void textRects(Vector<IntRect>&) const; 7075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 708926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) unsigned connectedSubframeCount() const; 709926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void incrementConnectedSubframeCount(unsigned amount = 1); 710926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void decrementConnectedSubframeCount(unsigned amount = 1); 711926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void updateAncestorConnectedSubframeCountForRemoval() const; 712926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void updateAncestorConnectedSubframeCountForInsertion() const; 713926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 714e6d4491e48613634a83c1957c72759da80987961Ben Murdoch PassRefPtr<NodeList> getDestinationInsertionPoints(); 715e6d4491e48613634a83c1957c72759da80987961Ben Murdoch 7165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 7175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) enum NodeFlags { 7185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IsTextFlag = 1, 7195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IsContainerFlag = 1 << 1, 7205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IsElementFlag = 1 << 2, 721e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch IsHTMLFlag = 1 << 3, 722e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch IsSVGFlag = 1 << 4, 723e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch IsAttachedFlag = 1 << 5, 724e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch ChildNeedsStyleRecalcFlag = 1 << 6, 725e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch InDocumentFlag = 1 << 7, 726e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch IsLinkFlag = 1 << 8, 727e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch IsUserActionElement = 1 << 9, 728e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch HasRareDataFlag = 1 << 10, 729e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch IsDocumentFragmentFlag = 1 << 11, 7305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // These bits are used by derived classes, pulled up here so they can 7325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // be stored in the same memory word as the Node bits above. 733e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch IsParsingChildrenFinishedFlag = 1 << 12, // Element 734e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch HasSVGRareDataFlag = 1 << 13, // SVGElement 7355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) StyleChangeMask = 1 << nodeStyleChangeShift | 1 << (nodeStyleChangeShift + 1), 7375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 738e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch SelfOrAncestorHasDirAutoFlag = 1 << 16, 739e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 740e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch HasNameOrIsEditingTextFlag = 1 << 17, 7415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 742e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch InNamedFlowFlag = 1 << 18, 743e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch HasSyntheticAttrChildNodesFlag = 1 << 19, 744e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch HasCustomStyleCallbacksFlag = 1 << 20, 745e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch HasScopedHTMLStyleChildFlag = 1 << 21, 746e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch HasEventTargetDataFlag = 1 << 22, 747e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch V8CollectableDuringMinorGCFlag = 1 << 23, 748e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch IsInsertionPointFlag = 1 << 24, 749e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch IsInShadowTreeFlag = 1 << 25, 7505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7517757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch NotifyRendererWithIdenticalStyles = 1 << 26, 752926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 7537757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch CustomElementIsUpgradeCandidateOrUpgraded = 1 << 27, 7547757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch CustomElementHasDefinitionOrIsUpgraded = 1 << 28, 755591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 756f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) ChildNeedsDistributionRecalc = 1 << 29, 757f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 758926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) DefaultNodeFlags = IsParsingChildrenFinishedFlag 7595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 7605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 761f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) // 2 bits remaining 7625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool getFlag(NodeFlags mask) const { return m_nodeFlags & mask; } 76402772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch void setFlag(bool f, NodeFlags mask) const { m_nodeFlags = (m_nodeFlags & ~mask) | (-(int32_t)f & mask); } 76502772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch void setFlag(NodeFlags mask) const { m_nodeFlags |= mask; } 76602772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch void clearFlag(NodeFlags mask) const { m_nodeFlags &= ~mask; } 7675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)protected: 76902772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch enum ConstructionType { 7705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) CreateOther = DefaultNodeFlags, 7715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) CreateText = DefaultNodeFlags | IsTextFlag, 77202772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch CreateContainer = DefaultNodeFlags | IsContainerFlag, 77302772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch CreateElement = CreateContainer | IsElementFlag, 774521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) CreatePseudoElement = CreateElement | InDocumentFlag, 775521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) CreateShadowRoot = CreateContainer | IsDocumentFragmentFlag | IsInShadowTreeFlag, 776926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) CreateDocumentFragment = CreateContainer | IsDocumentFragmentFlag, 777e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch CreateHTMLElement = CreateElement | IsHTMLFlag, 778e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch CreateSVGElement = CreateElement | IsSVGFlag, 779926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) CreateDocument = CreateContainer | InDocumentFlag, 780521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) CreateInsertionPoint = CreateHTMLElement | IsInsertionPointFlag, 781926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) CreateEditingText = CreateText | HasNameOrIsEditingTextFlag, 7825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 7835267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 7845267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) Node(TreeScope* treeScope, ConstructionType type) 7855267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) : m_nodeFlags(type) 7865267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , m_parentOrShadowHostNode(0) 7875267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , m_treeScope(treeScope) 7885267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , m_previous(0) 7895267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , m_next(0) 7905267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 7915267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) ScriptWrappable::init(this); 7925267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) if (!m_treeScope) 7935267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) m_treeScope = TreeScope::noDocumentInstance(); 7945267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) m_treeScope->guardRef(); 7955267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 7965267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#if !defined(NDEBUG) || (defined(DUMP_NODE_STATISTICS) && DUMP_NODE_STATISTICS) 7975267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) trackForDebugging(); 7985267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#endif 7995267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) InspectorCounters::incrementCounter(InspectorCounters::NodeCounter); 8005267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 8015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void didMoveToNewDocument(Document* oldDocument); 80302772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 8045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void addSubresourceAttributeURLs(ListHashSet<KURL>&) const { } 805926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 8065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasRareData() const { return getFlag(HasRareDataFlag); } 8075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) NodeRareData* rareData() const; 8095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) NodeRareData* ensureRareData(); 8105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void clearRareData(); 8115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void clearEventTargetData(); 8135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 814926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void setHasCustomStyleCallbacks() { setFlag(true, HasCustomStyleCallbacksFlag); } 8155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 816926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) Document* documentInternal() const { return treeScope()->documentScope(); } 817926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void setTreeScope(TreeScope* scope) { m_treeScope = scope; } 8185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 820926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) friend class TreeShared<Node>; 8215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 822926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual PseudoId customPseudoId() const 823926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 824926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ASSERT(hasCustomStyleCallbacks()); 825926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return NOPSEUDO; 826926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 8275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 828926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void removedLastRef(); 829926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool hasTreeSharedParent() const { return !!parentOrShadowHostNode(); } 8305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) enum EditableLevel { Editable, RichlyEditable }; 8325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool rendererIsEditable(EditableLevel, UserSelectAllTreatment = UserSelectAllIsAlwaysNonEditable) const; 8335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isEditableToAccessibility(EditableLevel) const; 8345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 835926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isUserActionElementActive() const; 836926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isUserActionElementInActiveChain() const; 837926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isUserActionElementHovered() const; 838926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isUserActionElementFocused() const; 839926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 8405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setStyleChange(StyleChangeType); 8415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Used to share code between lazyAttach and setNeedsStyleRecalc. 8435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void markAncestorsWithChildNeedsStyleRecalc(); 8445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void refEventTarget(); 8465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void derefEventTarget(); 8475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual RenderStyle* nonRendererStyle() const { return 0; } 8495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual RenderStyle* virtualComputedStyle(PseudoId = NOPSEUDO); 8515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Element* ancestorElement() const; 8535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void trackForDebugging(); 8555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Vector<OwnPtr<MutationObserverRegistration> >* mutationObserverRegistry(); 8575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HashSet<MutationObserverRegistration*>* transientMutationObserverRegistry(); 8585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) mutable uint32_t m_nodeFlags; 860926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ContainerNode* m_parentOrShadowHostNode; 861926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) TreeScope* m_treeScope; 8625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Node* m_previous; 8635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Node* m_next; 8645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // When a node has rare data we move the renderer into the rare data. 8655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) union DataUnion { 8665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DataUnion() : m_renderer(0) { } 8675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderObject* m_renderer; 8685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) NodeRareDataBase* m_rareData; 8695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } m_data; 8705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)protected: 8725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isParsingChildrenFinished() const { return getFlag(IsParsingChildrenFinishedFlag); } 8735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setIsParsingChildrenFinished() { setFlag(IsParsingChildrenFinishedFlag); } 8745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void clearIsParsingChildrenFinished() { clearFlag(IsParsingChildrenFinishedFlag); } 8755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasSVGRareData() const { return getFlag(HasSVGRareDataFlag); } 8775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setHasSVGRareData() { setFlag(HasSVGRareDataFlag); } 8785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void clearHasSVGRareData() { clearFlag(HasSVGRareDataFlag); } 8795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 8805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Used in Node::addSubresourceAttributeURLs() and in addSubresourceStyleURLs() 8825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline void addSubresourceURL(ListHashSet<KURL>& urls, const KURL& url) 8835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!url.isNull()) 8855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) urls.add(url); 8865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 888926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)inline void Node::setParentOrShadowHostNode(ContainerNode* parent) 8895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 890926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ASSERT(isMainThread()); 891926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_parentOrShadowHostNode = parent; 8925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 894926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)inline ContainerNode* Node::parentOrShadowHostNode() const 8955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 89653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) ASSERT(isMainThread()); 897926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return m_parentOrShadowHostNode; 8985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 900926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)inline ContainerNode* Node::parentNode() const 9015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 902926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return isShadowRoot() ? 0 : parentOrShadowHostNode(); 9035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline ContainerNode* Node::parentNodeGuaranteedHostFree() const 9065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 907926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ASSERT(!isShadowRoot()); 908926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return parentOrShadowHostNode(); 9095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 91193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)inline void Node::lazyReattachIfAttached() 9125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (attached()) 91493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) lazyReattach(); 9155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9175267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)inline void Node::lazyReattach(ShouldSetAttached shouldSetAttached) 9185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 919df95704c49daea886ddad70775bda23618d6274dBen Murdoch if (styleChangeType() == LazyAttachStyleChange) 920df95704c49daea886ddad70775bda23618d6274dBen Murdoch return; 921df95704c49daea886ddad70775bda23618d6274dBen Murdoch 922591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch AttachContext context; 923591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch context.performingReattach = true; 924591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 9255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (attached()) 926591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch detach(context); 9275267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) lazyAttach(shouldSetAttached); 9285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 93083750176c3ee2cea66c8a9751271026a5901be3aBen Murdochinline bool shouldRecalcStyle(Node::StyleChange change, const Node* node) 93181a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles){ 93281a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) return change >= Node::Inherit || node->childNeedsStyleRecalc() || node->needsStyleRecalc(); 93381a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)} 93481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 9355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} //namespace 9365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef NDEBUG 9385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Outside the WebCore namespace for ease of invocation from gdb. 9395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void showTree(const WebCore::Node*); 9405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void showNodePath(const WebCore::Node*); 9415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 9425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 944