Changeset 30112 in webkit
- Timestamp:
- Feb 9, 2008 2:49:13 PM (16 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 70 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r30111 r30112 1 2008-02-09 David Hyatt <hyatt@apple.com> 2 3 Fix for bug 17203, high CPU usage loading HTML5 spec. This patch significantly improves the performance 4 of CSS3 selectors. 5 6 (1) Split the notion of being affected by positional rules into "forward" and "backward." The "forward" 7 selectors do not need to re-resolve during parsing, since children are appended on the end. Only the 8 "backward" selectors like last-child or nth-last-child have to re-resolve when a close tag is encountered. 9 10 (2) Extend childrenChanged to specify whether the children were changed by the parser or not. This allows 11 Element::childrenChanged to know when the parser is adding children so that it can ignore those adds when 12 possible. 13 14 (3) Make sure all Elements now know whether or not their children are currently parsing. Backwards selectors 15 like last-child will always return false when children are still being parsed. When an Element finishes 16 parsing its children, finishParsingChildren() gets called and will make sure the children re-resolve properly. 17 18 (4) Added a beginParsingChildren method and renamed finishParsing to finishedParsingChildren. 19 20 (5) Eliminated one-off hacks that did the same thing in HTMLObjectElement and HTMLAppletElement. 21 22 (6) Patched many incorrect implementations of finishedParsingChildren that did not properly call into their 23 base class (mostly new SVG elements that got added for SVG fonts around the time this became a requirement). 24 25 Reviewed by Eric 26 27 * css/CSSStyleSelector.cpp: 28 (WebCore::CSSStyleSelector::checkSelector): 29 (WebCore::CSSStyleSelector::checkOneSelector): 30 * dom/Attr.cpp: 31 (WebCore::Attr::childrenChanged): 32 * dom/Attr.h: 33 * dom/ContainerNode.cpp: 34 (WebCore::ContainerNode::addChild): 35 * dom/Document.cpp: 36 (WebCore::Document::childrenChanged): 37 * dom/Document.h: 38 * dom/Element.cpp: 39 (WebCore::Element::Element): 40 (WebCore::Element::recalcStyle): 41 (WebCore::checkFirstChildRules): 42 (WebCore::checkLastChildRules): 43 (WebCore::checkEmptyRules): 44 (WebCore::checkStyleRules): 45 (WebCore::Element::childrenChanged): 46 (WebCore::Element::finishParsingChildren): 47 * dom/Element.h: 48 (WebCore::Element::finishedParsingChildren): 49 (WebCore::Element::beginParsingChildren): 50 * dom/Node.cpp: 51 * dom/Node.h: 52 (WebCore::Node::finishParsingChildren): 53 (WebCore::Node::beginParsingChildren): 54 (WebCore::Node::childrenChanged): 55 * dom/StyledElement.cpp: 56 (WebCore::StyledElement::StyledElement): 57 * dom/StyledElement.h: 58 * dom/XMLTokenizer.cpp: 59 (WebCore::XMLTokenizer::startElementNs): 60 (WebCore::XMLTokenizer::endElementNs): 61 (WebCore::): 62 * html/HTMLAppletElement.cpp: 63 (WebCore::HTMLAppletElement::HTMLAppletElement): 64 (WebCore::HTMLAppletElement::finishParsingChildren): 65 * html/HTMLAppletElement.h: 66 * html/HTMLElementFactory.cpp: 67 (WebCore::objectConstructor): 68 * html/HTMLGenericFormElement.cpp: 69 (WebCore::HTMLFormControlElementWithState::finishParsingChildren): 70 * html/HTMLGenericFormElement.h: 71 * html/HTMLObjectElement.cpp: 72 (WebCore::HTMLObjectElement::HTMLObjectElement): 73 (WebCore::HTMLObjectElement::finishParsingChildren): 74 (WebCore::HTMLObjectElement::childrenChanged): 75 * html/HTMLObjectElement.h: 76 * html/HTMLOptGroupElement.cpp: 77 (WebCore::HTMLOptGroupElement::childrenChanged): 78 * html/HTMLOptGroupElement.h: 79 * html/HTMLOptionElement.cpp: 80 (WebCore::HTMLOptionElement::childrenChanged): 81 * html/HTMLOptionElement.h: 82 * html/HTMLParser.cpp: 83 (WebCore::HTMLParser::insertNode): 84 (WebCore::HTMLParser::pushBlock): 85 (WebCore::HTMLParser::popOneBlockCommon): 86 * html/HTMLScriptElement.cpp: 87 (WebCore::HTMLScriptElement::childrenChanged): 88 (WebCore::HTMLScriptElement::finishParsingChildren): 89 * html/HTMLScriptElement.h: 90 * html/HTMLSelectElement.cpp: 91 (WebCore::HTMLSelectElement::childrenChanged): 92 * html/HTMLSelectElement.h: 93 * html/HTMLStyleElement.cpp: 94 (WebCore::HTMLStyleElement::finishParsingChildren): 95 (WebCore::HTMLStyleElement::childrenChanged): 96 * html/HTMLStyleElement.h: 97 * html/HTMLTextAreaElement.cpp: 98 (WebCore::HTMLTextAreaElement::childrenChanged): 99 * html/HTMLTextAreaElement.h: 100 * html/HTMLTitleElement.cpp: 101 (WebCore::HTMLTitleElement::childrenChanged): 102 * html/HTMLTitleElement.h: 103 * rendering/RenderApplet.cpp: 104 (WebCore::RenderApplet::createWidgetIfNecessary): 105 * rendering/RenderPartObject.cpp: 106 (WebCore::RenderPartObject::updateWidget): 107 * rendering/RenderStyle.cpp: 108 (WebCore::RenderStyle::RenderStyle): 109 * rendering/RenderStyle.h: 110 (WebCore::RenderStyle::childrenAffectedByForwardPositionalRules): 111 (WebCore::RenderStyle::setChildrenAffectedByForwardPositionalRules): 112 (WebCore::RenderStyle::childrenAffectedByBackwardPositionalRules): 113 (WebCore::RenderStyle::setChildrenAffectedByBackwardPositionalRules): 114 * svg/SVGAnimationElement.cpp: 115 (WebCore::SVGAnimationElement::finishParsingChildren): 116 * svg/SVGAnimationElement.h: 117 * svg/SVGClipPathElement.cpp: 118 (WebCore::SVGClipPathElement::childrenChanged): 119 * svg/SVGClipPathElement.h: 120 * svg/SVGDefinitionSrcElement.cpp: 121 (WebCore::SVGDefinitionSrcElement::childrenChanged): 122 * svg/SVGDefinitionSrcElement.h: 123 * svg/SVGElement.cpp: 124 (WebCore::SVGElement::finishParsingChildren): 125 * svg/SVGElement.h: 126 * svg/SVGFontFaceElement.cpp: 127 (WebCore::SVGFontFaceElement::childrenChanged): 128 * svg/SVGFontFaceElement.h: 129 * svg/SVGFontFaceFormatElement.cpp: 130 (WebCore::SVGFontFaceFormatElement::childrenChanged): 131 * svg/SVGFontFaceFormatElement.h: 132 * svg/SVGFontFaceSrcElement.cpp: 133 (WebCore::SVGFontFaceSrcElement::childrenChanged): 134 * svg/SVGFontFaceSrcElement.h: 135 * svg/SVGFontFaceUriElement.cpp: 136 (WebCore::SVGFontFaceUriElement::childrenChanged): 137 * svg/SVGFontFaceUriElement.h: 138 * svg/SVGGElement.cpp: 139 (WebCore::SVGGElement::childrenChanged): 140 * svg/SVGGElement.h: 141 * svg/SVGGradientElement.cpp: 142 (WebCore::SVGGradientElement::childrenChanged): 143 * svg/SVGGradientElement.h: 144 * svg/SVGMarkerElement.cpp: 145 (WebCore::SVGMarkerElement::childrenChanged): 146 * svg/SVGMarkerElement.h: 147 * svg/SVGMaskElement.cpp: 148 (WebCore::SVGMaskElement::childrenChanged): 149 * svg/SVGMaskElement.h: 150 * svg/SVGPatternElement.cpp: 151 (WebCore::SVGPatternElement::childrenChanged): 152 * svg/SVGPatternElement.h: 153 * svg/SVGStyleElement.cpp: 154 (WebCore::SVGStyleElement::finishParsingChildren): 155 (WebCore::SVGStyleElement::childrenChanged): 156 * svg/SVGStyleElement.h: 157 * svg/SVGStyledElement.cpp: 158 (WebCore::SVGStyledElement::childrenChanged): 159 * svg/SVGStyledElement.h: 160 * svg/SVGTitleElement.cpp: 161 (WebCore::SVGTitleElement::childrenChanged): 162 * svg/SVGTitleElement.h: 163 * svg/SVGUseElement.cpp: 164 (WebCore::SVGUseElement::childrenChanged): 165 * svg/SVGUseElement.h: 166 1 167 2008-02-09 Holger Hans Peter Freyther <holger.freyther@trolltech.com> 2 168 … … 150 316 * dom/SelectorNodeList.cpp: 151 317 (WebCore::SelectorNodeList::SelectorNodeList): ditto. 318 319 152 320 153 321 2008-02-08 David Hyatt <hyatt@apple.com> -
trunk/WebCore/css/CSSStyleSelector.cpp
r30069 r30112 734 734 a = -1; // -n == -1n 735 735 else 736 a = nth.substring( 1, n - 1).toInt();736 a = nth.substring(0, n - 1).toInt(); 737 737 } else if (!n) 738 738 a = 1; // n == 1n … … 1447 1447 case CSSSelector::DirectAdjacent: 1448 1448 { 1449 if (!m_collectRulesOnly && e->parentNode() && e->parentNode()->isElementNode()) { 1450 RenderStyle* parentStyle = (m_element == e) ? m_parentStyle : e->parentNode()->renderStyle(); 1451 if (parentStyle) 1452 parentStyle->setChildrenAffectedByForwardPositionalRules(); 1453 } 1449 1454 Node* n = e->previousSibling(); 1450 1455 while (n && !n->isElementNode()) … … 1456 1461 } 1457 1462 case CSSSelector::IndirectAdjacent: 1463 if (!m_collectRulesOnly && e->parentNode() && e->parentNode()->isElementNode()) { 1464 RenderStyle* parentStyle = (m_element == e) ? m_parentStyle : e->parentNode()->renderStyle(); 1465 if (parentStyle) 1466 parentStyle->setChildrenAffectedByForwardPositionalRules(); 1467 } 1458 1468 while (true) { 1459 1469 Node* n = e->previousSibling(); … … 1695 1705 RenderStyle* parentStyle = (m_element == e) ? m_parentStyle : e->parentNode()->renderStyle(); 1696 1706 if (parentStyle) 1697 parentStyle->setChildrenAffectedBy PositionalRules();1707 parentStyle->setChildrenAffectedByForwardPositionalRules(); 1698 1708 } 1699 1709 return result; … … 1704 1714 // last-child matches the last child that is an element 1705 1715 if (e->parentNode() && e->parentNode()->isElementNode()) { 1716 Element* parentNode = static_cast<Element*>(e->parentNode()); 1706 1717 bool result = false; 1707 Node* n = e->nextSibling(); 1708 while (n && !n->isElementNode()) 1709 n = n->nextSibling(); 1710 if (!n) 1711 result = true; 1718 if (parentNode->isFinishedParsingChildren()) { 1719 Node* n = e->nextSibling(); 1720 while (n && !n->isElementNode()) 1721 n = n->nextSibling(); 1722 if (!n) 1723 result = true; 1724 } 1712 1725 if (!m_collectRulesOnly) { 1713 1726 RenderStyle* childStyle = (m_element == e) ? m_style : e->renderStyle(); 1714 RenderStyle* parentStyle = (m_element == e) ? m_parentStyle : e->parentNode()->renderStyle();1727 RenderStyle* parentStyle = (m_element == e) ? m_parentStyle : parentNode->renderStyle(); 1715 1728 if (parentStyle) 1716 1729 parentStyle->setChildrenAffectedByLastChildRules(); … … 1725 1738 // last-of-type matches the last element of its type 1726 1739 if (e->parentNode() && e->parentNode()->isElementNode()) { 1740 Element* parentNode = static_cast<Element*>(e->parentNode()); 1741 if (!m_collectRulesOnly) { 1742 RenderStyle* parentStyle = (m_element == e) ? m_parentStyle : parentNode->renderStyle(); 1743 if (parentStyle) 1744 parentStyle->setChildrenAffectedByBackwardPositionalRules(); 1745 } 1746 if (!parentNode->isFinishedParsingChildren()) 1747 return false; 1727 1748 bool result = false; 1728 1749 const QualifiedName& type = e->tagQName(); … … 1735 1756 if (!n) 1736 1757 result = true; 1737 if (!m_collectRulesOnly) {1738 RenderStyle* parentStyle = (m_element == e) ? m_parentStyle : e->parentNode()->renderStyle();1739 if (parentStyle)1740 parentStyle->setChildrenAffectedByPositionalRules();1741 }1742 1758 return result; 1743 1759 } … … 1746 1762 case CSSSelector::PseudoOnlyChild: { 1747 1763 if (e->parentNode() && e->parentNode()->isElementNode()) { 1764 Element* parentNode = static_cast<Element*>(e->parentNode()); 1748 1765 bool firstChild = false; 1749 1766 bool lastChild = false; … … 1754 1771 if (!n) 1755 1772 firstChild = true; 1756 if (firstChild ) {1773 if (firstChild && parentNode->isFinishedParsingChildren()) { 1757 1774 n = e->nextSibling(); 1758 1775 while (n && !n->isElementNode()) … … 1763 1780 if (!m_collectRulesOnly) { 1764 1781 RenderStyle* childStyle = (m_element == e) ? m_style : e->renderStyle(); 1765 RenderStyle* parentStyle = (m_element == e) ? m_parentStyle : e->parentNode()->renderStyle();1782 RenderStyle* parentStyle = (m_element == e) ? m_parentStyle : parentNode->renderStyle(); 1766 1783 if (parentStyle) { 1767 1784 parentStyle->setChildrenAffectedByFirstChildRules(); … … 1780 1797 // FIXME: This selector is very slow. 1781 1798 if (e->parentNode() && e->parentNode()->isElementNode()) { 1799 Element* parentNode = static_cast<Element*>(e->parentNode()); 1800 if (!m_collectRulesOnly) { 1801 RenderStyle* parentStyle = (m_element == e) ? m_parentStyle : parentNode->renderStyle(); 1802 if (parentStyle) { 1803 parentStyle->setChildrenAffectedByForwardPositionalRules(); 1804 parentStyle->setChildrenAffectedByBackwardPositionalRules(); 1805 } 1806 } 1807 if (!parentNode->isFinishedParsingChildren()) 1808 return false; 1782 1809 bool firstChild = false; 1783 1810 bool lastChild = false; … … 1800 1827 if (!n) 1801 1828 lastChild = true; 1802 }1803 if (!m_collectRulesOnly) {1804 RenderStyle* parentStyle = (m_element == e) ? m_parentStyle : e->parentNode()->renderStyle();1805 if (parentStyle)1806 parentStyle->setChildrenAffectedByPositionalRules();1807 1829 } 1808 1830 return firstChild && lastChild; … … 1839 1861 childStyle->setChildIndex(count); 1840 1862 if (parentStyle) 1841 parentStyle->setChildrenAffectedBy PositionalRules();1863 parentStyle->setChildrenAffectedByForwardPositionalRules(); 1842 1864 } 1843 1865 … … 1866 1888 RenderStyle* parentStyle = (m_element == e) ? m_parentStyle : e->parentNode()->renderStyle(); 1867 1889 if (parentStyle) 1868 parentStyle->setChildrenAffectedBy PositionalRules();1890 parentStyle->setChildrenAffectedByForwardPositionalRules(); 1869 1891 } 1870 1892 … … 1882 1904 break; 1883 1905 if (e->parentNode() && e->parentNode()->isElementNode()) { 1906 Element* parentNode = static_cast<Element*>(e->parentNode()); 1907 if (!m_collectRulesOnly) { 1908 RenderStyle* parentStyle = (m_element == e) ? m_parentStyle : parentNode->renderStyle(); 1909 if (parentStyle) 1910 parentStyle->setChildrenAffectedByBackwardPositionalRules(); 1911 } 1912 if (!parentNode->isFinishedParsingChildren()) 1913 return false; 1884 1914 int count = 1; 1885 1915 Node* n = e->nextSibling(); … … 1889 1919 n = n->nextSibling(); 1890 1920 } 1891 1892 if (!m_collectRulesOnly) {1893 RenderStyle* parentStyle = (m_element == e) ? m_parentStyle : e->parentNode()->renderStyle();1894 if (parentStyle)1895 parentStyle->setChildrenAffectedByPositionalRules();1896 }1897 1898 1921 if (matchNth(count, a, b)) 1899 1922 return true; … … 1908 1931 break; 1909 1932 if (e->parentNode() && e->parentNode()->isElementNode()) { 1933 Element* parentNode = static_cast<Element*>(e->parentNode()); 1934 if (!m_collectRulesOnly) { 1935 RenderStyle* parentStyle = (m_element == e) ? m_parentStyle : parentNode->renderStyle(); 1936 if (parentStyle) 1937 parentStyle->setChildrenAffectedByBackwardPositionalRules(); 1938 } 1939 if (!parentNode->isFinishedParsingChildren()) 1940 return false; 1910 1941 int count = 1; 1911 1942 const QualifiedName& type = e->tagQName(); … … 1916 1947 n = n->nextSibling(); 1917 1948 } 1918 1919 if (!m_collectRulesOnly) {1920 RenderStyle* parentStyle = (m_element == e) ? m_parentStyle : e->parentNode()->renderStyle();1921 if (parentStyle)1922 parentStyle->setChildrenAffectedByPositionalRules();1923 }1924 1925 1949 if (matchNth(count, a, b)) 1926 1950 return true; -
trunk/WebCore/dom/Attr.cpp
r29098 r30112 150 150 } 151 151 152 void Attr::childrenChanged( )152 void Attr::childrenChanged(bool changedByParser) 153 153 { 154 Node::childrenChanged( );154 Node::childrenChanged(changedByParser); 155 155 156 156 if (m_ignoreChildrenChanged > 0) -
trunk/WebCore/dom/Attr.h
r25754 r30112 78 78 virtual bool childTypeAllowed(NodeType); 79 79 80 virtual void childrenChanged( );80 virtual void childrenChanged(bool changedByParser = false); 81 81 virtual String toString() const; 82 82 -
trunk/WebCore/dom/ContainerNode.cpp
r29053 r30112 582 582 if (document()->hasNodeLists()) 583 583 notifyNodeListsChildrenChanged(); 584 childrenChanged( );584 childrenChanged(true); 585 585 586 586 if (newChild->isElementNode()) -
trunk/WebCore/dom/Document.cpp
r30098 r30112 483 483 } 484 484 485 void Document::childrenChanged( )485 void Document::childrenChanged(bool changedByParser) 486 486 { 487 487 // invalidate the document element we have cached in case it was replaced -
trunk/WebCore/dom/Document.h
r30089 r30112 181 181 182 182 DOMImplementation* implementation() const; 183 virtual void childrenChanged( );183 virtual void childrenChanged(bool changedByParser = false); 184 184 Element* documentElement() const; 185 185 virtual PassRefPtr<Element> createElement(const String& tagName, ExceptionCode&); -
trunk/WebCore/dom/Element.cpp
r29932 r30112 99 99 : ContainerNode(doc) 100 100 , m_tagName(qName) 101 , m_isStyleAttributeValid(true) 102 , m_synchronizingStyleAttribute(false) 103 , m_parsingChildrenFinished(true) 101 104 { 102 105 } … … 702 705 bool hasParentStyle = parentNode() ? parentNode()->renderStyle() : false; 703 706 bool hasPositionalChildren = currentStyle && (currentStyle->childrenAffectedByFirstChildRules() || currentStyle->childrenAffectedByLastChildRules() || 704 currentStyle->childrenAffectedBy PositionalRules());707 currentStyle->childrenAffectedByForwardPositionalRules() || currentStyle->childrenAffectedByBackwardPositionalRules()); 705 708 706 709 #if ENABLE(SVG) … … 737 740 if (currentStyle->affectedByDragRules()) 738 741 newStyle->setAffectedByDragRules(true); 739 if (currentStyle->childrenAffectedByPositionalRules()) 740 newStyle->setChildrenAffectedByPositionalRules(); 742 if (currentStyle->childrenAffectedByForwardPositionalRules()) 743 newStyle->setChildrenAffectedByForwardPositionalRules(); 744 if (currentStyle->childrenAffectedByBackwardPositionalRules()) 745 newStyle->setChildrenAffectedByBackwardPositionalRules(); 741 746 if (currentStyle->childrenAffectedByFirstChildRules()) 742 747 newStyle->setChildrenAffectedByFirstChildRules(); … … 794 799 } 795 800 796 static boolcheckFirstChildRules(Element* e, RenderStyle* style)801 static void checkFirstChildRules(Element* e, RenderStyle* style) 797 802 { 798 803 if (style->childrenAffectedByFirstChildRules()) { … … 803 808 if (checkingFirstChild) { 804 809 if (n->attached() && n->renderStyle() && !n->renderStyle()->firstChildState()) 805 return true;810 n->setChanged(); 806 811 checkingFirstChild = false; 807 812 } else { 808 813 if (n->attached() && n->renderStyle() && n->renderStyle()->firstChildState()) 809 return true;814 n->setChanged(); 810 815 break; 811 816 } … … 813 818 } 814 819 } 815 return false; 816 } 817 818 static bool checkLastChildRules(Element* e, RenderStyle* style) 820 } 821 822 static void checkLastChildRules(Element* e, RenderStyle* style) 819 823 { 820 824 if (style->childrenAffectedByLastChildRules()) { … … 825 829 if (checkingLastChild) { 826 830 if (n->attached() && n->renderStyle() && !n->renderStyle()->lastChildState()) 827 return true;831 n->setChanged(); 828 832 checkingLastChild = false; 829 833 } else { 830 834 if (n->attached() && n->renderStyle() && n->renderStyle()->lastChildState()) 831 return true;835 n->setChanged(); 832 836 break; 833 837 } … … 835 839 } 836 840 } 837 return false;838 841 } 839 842 840 843 static bool checkEmptyRules(Element* e, RenderStyle* style) 841 844 { 842 return (style->affectedByEmpty() && (!style->emptyState() || e->hasChildNodes())); 843 } 844 845 void Element::childrenChanged() 846 { 847 ContainerNode::childrenChanged(); 848 849 if (changed()) 850 return; 851 852 RenderStyle* style = renderStyle(); 853 if (!style) 854 return; 855 856 if (style->childrenAffectedByPositionalRules()) { 857 setChanged(); 858 return; 859 } 860 861 if (checkFirstChildRules(this, style) || checkLastChildRules(this, style) || checkEmptyRules(this, style)) { 862 setChanged(); 863 return; 864 } 845 return style->affectedByEmpty() && (!style->emptyState() || e->hasChildNodes()); 846 } 847 848 static void checkStyleRules(Element* e, RenderStyle* style, bool changedByParser) 849 { 850 if (e->changed() || !style) 851 return; 852 853 if (style->childrenAffectedByBackwardPositionalRules() || 854 (!changedByParser && style->childrenAffectedByForwardPositionalRules()) || 855 checkEmptyRules(e, style)) { 856 e->setChanged(); 857 return; 858 } 859 860 checkFirstChildRules(e, style); 861 checkLastChildRules(e, style); 862 } 863 864 void Element::childrenChanged(bool changedByParser) 865 { 866 ContainerNode::childrenChanged(changedByParser); 867 if (!changedByParser) 868 checkStyleRules(this, renderStyle(), false); 869 } 870 871 void Element::finishParsingChildren() 872 { 873 ContainerNode::finishParsingChildren(); 874 m_parsingChildrenFinished = true; 875 checkStyleRules(this, renderStyle(), true); 865 876 } 866 877 -
trunk/WebCore/dom/Element.h
r29918 r30112 119 119 virtual void insertedIntoDocument(); 120 120 virtual void removedFromDocument(); 121 virtual void childrenChanged( );121 virtual void childrenChanged(bool changedByParser = false); 122 122 123 123 virtual bool isInputTypeHidden() const { return false; } … … 191 191 virtual void didRestoreFromCache() { } 192 192 193 bool isFinishedParsingChildren() const { return m_parsingChildrenFinished; } 194 virtual void finishParsingChildren(); 195 virtual void beginParsingChildren() { m_parsingChildrenFinished = false; } 196 193 197 private: 194 198 ElementRareData* rareData(); … … 205 209 virtual bool virtualHasTagName(const QualifiedName&) const; 206 210 211 private: 212 QualifiedName m_tagName; 213 207 214 protected: 208 215 mutable RefPtr<NamedAttrMap> namedAttrMap; 209 216 217 // These two bits are really used by the StyledElement subclass, but they are pulled up here in order to be shared with other 218 // Element bits. 219 mutable bool m_isStyleAttributeValid : 1; 220 mutable bool m_synchronizingStyleAttribute : 1; 221 210 222 private: 211 QualifiedName m_tagName;223 bool m_parsingChildrenFinished : 1; 212 224 }; 213 225 -
trunk/WebCore/dom/Node.cpp
r30096 r30112 858 858 } 859 859 860 void Node::childrenChanged()861 {862 }863 864 860 bool Node::isReadOnlyNode() 865 861 { -
trunk/WebCore/dom/Node.h
r30089 r30112 215 215 // Also used for script elements and some SVG elements for similar purposes, 216 216 // but making parsing a special case in this respect should be avoided if possible. 217 virtual void finishedParsing() { } 217 virtual void finishParsingChildren() { } 218 virtual void beginParsingChildren() { } 218 219 219 220 // Called by the frame right before dispatching an unloadEvent. [Radar 4532113] … … 436 437 * node that is of the type CDATA_SECTION_NODE, TEXT_NODE or COMMENT_NODE has changed its value. 437 438 */ 438 virtual void childrenChanged( );439 virtual void childrenChanged(bool changedByParser = false) {}; 439 440 440 441 virtual String toString() const = 0; -
trunk/WebCore/dom/StyledElement.cpp
r29647 r30112 108 108 : Element(name, doc) 109 109 { 110 m_isStyleAttributeValid = true;111 m_synchronizingStyleAttribute = false;112 110 } 113 111 -
trunk/WebCore/dom/StyledElement.h
r29647 r30112 79 79 protected: 80 80 RefPtr<CSSMutableStyleDeclaration> m_inlineStyleDecl; 81 mutable bool m_isStyleAttributeValid : 1;82 mutable bool m_synchronizingStyleAttribute : 1;83 81 }; 84 82 -
trunk/WebCore/dom/XMLTokenizer.cpp
r30013 r30112 766 766 } 767 767 768 newElement->beginParsingChildren(); 769 768 770 if (newElement->hasTagName(scriptTag)) 769 771 static_cast<HTMLScriptElement*>(newElement.get())->setCreatedByParser(true); … … 806 808 Node* n = m_currentNode; 807 809 RefPtr<Node> parent = n->parentNode(); 808 n->finish edParsing();810 n->finishParsingChildren(); 809 811 810 812 // don't load external scripts for standalone documents (for now) … … 1883 1885 1884 1886 RefPtr<Node> parent = n->parentNode(); 1885 n->finish edParsing();1887 n->finishParsingChildren(); 1886 1888 1887 1889 // don't load external scripts for standalone documents (for now) -
trunk/WebCore/html/HTMLAppletElement.cpp
r25754 r30112 39 39 HTMLAppletElement::HTMLAppletElement(Document *doc) 40 40 : HTMLPlugInElement(appletTag, doc) 41 , m_allParamsAvailable(false)42 41 { 43 42 } … … 160 159 #endif 161 160 162 void HTMLAppletElement::finish edParsing()161 void HTMLAppletElement::finishParsingChildren() 163 162 { 164 163 // The parser just reached </applet>, so all the params are available now. 165 m_allParamsAvailable = true;164 HTMLPlugInElement::finishParsingChildren(); 166 165 if (renderer()) 167 166 renderer()->setNeedsLayout(true); // This will cause it to create its widget & the Java applet 168 HTMLPlugInElement::finishedParsing();169 167 } 170 168 … … 177 175 } 178 176 179 bool HTMLAppletElement::allParamsAvailable()180 {181 return m_allParamsAvailable;182 }183 184 177 String HTMLAppletElement::alt() const 185 178 { -
trunk/WebCore/html/HTMLAppletElement.h
r25754 r30112 51 51 virtual bool rendererIsNeeded(RenderStyle*); 52 52 virtual RenderObject* createRenderer(RenderArena*, RenderStyle*); 53 virtual void finish edParsing();53 virtual void finishParsingChildren(); 54 54 virtual void detach(); 55 55 … … 79 79 void setVspace(const String&); 80 80 81 virtual bool allParamsAvailable();82 81 void setupApplet() const; 83 82 … … 87 86 private: 88 87 String oldIdAttr; 89 bool m_allParamsAvailable;90 88 }; 91 89 -
trunk/WebCore/html/HTMLElementFactory.cpp
r29175 r30112 323 323 static PassRefPtr<HTMLElement> objectConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool createdByParser) 324 324 { 325 RefPtr<HTMLObjectElement> object = new HTMLObjectElement(doc); 326 object->setComplete(!createdByParser); 325 RefPtr<HTMLObjectElement> object = new HTMLObjectElement(doc, createdByParser); 327 326 return object.release(); 328 327 } -
trunk/WebCore/html/HTMLGenericFormElement.cpp
r27380 r30112 248 248 } 249 249 250 void HTMLFormControlElementWithState::finishedParsing() 251 { 250 void HTMLFormControlElementWithState::finishParsingChildren() 251 { 252 HTMLGenericFormElement::finishParsingChildren(); 252 253 Document* doc = document(); 253 254 if (doc->hasStateForNewFormElements()) { -
trunk/WebCore/html/HTMLGenericFormElement.h
r27380 r30112 110 110 virtual ~HTMLFormControlElementWithState(); 111 111 112 virtual void finish edParsing();112 virtual void finishParsingChildren(); 113 113 114 114 virtual bool saveState(String& value) const = 0; -
trunk/WebCore/html/HTMLObjectElement.cpp
r30044 r30112 48 48 using namespace HTMLNames; 49 49 50 HTMLObjectElement::HTMLObjectElement(Document* doc )50 HTMLObjectElement::HTMLObjectElement(Document* doc, bool createdByParser) 51 51 : HTMLPlugInElement(objectTag, doc) 52 , m_needWidgetUpdate( false)52 , m_needWidgetUpdate(!createdByParser) 53 53 , m_useFallbackContent(false) 54 , m_complete(false)55 54 , m_docNamedItem(true) 56 55 { … … 186 185 } 187 186 188 void HTMLObjectElement::finishedParsing() 189 { 190 // The parser just reached </object>. 191 setComplete(true); 192 193 HTMLPlugInElement::finishedParsing(); 194 } 195 196 void HTMLObjectElement::setComplete(bool complete) 197 { 198 if (complete != m_complete) { 199 m_complete = complete; 200 if (complete && !m_useFallbackContent) { 201 m_needWidgetUpdate = true; 202 if (inDocument()) 203 setChanged(); 204 } 187 void HTMLObjectElement::finishParsingChildren() 188 { 189 HTMLPlugInElement::finishParsingChildren(); 190 if (!m_useFallbackContent) { 191 m_needWidgetUpdate = true; 192 if (inDocument()) 193 setChanged(); 205 194 } 206 195 } … … 250 239 } 251 240 252 void HTMLObjectElement::childrenChanged( )241 void HTMLObjectElement::childrenChanged(bool changedByParser) 253 242 { 254 243 updateDocNamedItem(); … … 257 246 setChanged(); 258 247 } 259 HTMLPlugInElement::childrenChanged( );248 HTMLPlugInElement::childrenChanged(changedByParser); 260 249 } 261 250 -
trunk/WebCore/html/HTMLObjectElement.h
r29913 r30112 33 33 class HTMLObjectElement : public HTMLPlugInElement { 34 34 public: 35 HTMLObjectElement(Document* );35 HTMLObjectElement(Document*, bool createdByParser); 36 36 ~HTMLObjectElement(); 37 37 … … 43 43 virtual bool rendererIsNeeded(RenderStyle*); 44 44 virtual RenderObject* createRenderer(RenderArena*, RenderStyle*); 45 virtual void finish edParsing();45 virtual void finishParsingChildren(); 46 46 virtual void detach(); 47 47 virtual void insertedIntoDocument(); … … 49 49 50 50 virtual void recalcStyle(StyleChange); 51 virtual void childrenChanged( );51 virtual void childrenChanged(bool changedByParser = false); 52 52 53 53 virtual bool isURLAttribute(Attribute*) const; … … 103 103 void setVspace(int); 104 104 105 bool isComplete() const { return m_complete; }106 void setComplete(bool complete);107 108 105 bool isDocNamedItem() const { return m_docNamedItem; } 109 106 … … 120 117 void updateDocNamedItem(); 121 118 String oldIdAttr; 122 bool m_complete;123 119 bool m_docNamedItem; 124 120 }; -
trunk/WebCore/html/HTMLOptGroupElement.cpp
r28524 r30112 93 93 } 94 94 95 void HTMLOptGroupElement::childrenChanged( )95 void HTMLOptGroupElement::childrenChanged(bool changedByParser) 96 96 { 97 97 recalcSelectOptions(); 98 HTMLGenericFormElement::childrenChanged( );98 HTMLGenericFormElement::childrenChanged(changedByParser); 99 99 } 100 100 -
trunk/WebCore/html/HTMLOptGroupElement.h
r28524 r30112 48 48 virtual bool appendChild(PassRefPtr<Node> newChild, ExceptionCode&); 49 49 virtual bool removeChildren(); 50 virtual void childrenChanged( );50 virtual void childrenChanged(bool changedByParser = false); 51 51 52 52 String label() const; -
trunk/WebCore/html/HTMLOptionElement.cpp
r29918 r30112 188 188 } 189 189 190 void HTMLOptionElement::childrenChanged( )190 void HTMLOptionElement::childrenChanged(bool changedByParser) 191 191 { 192 192 HTMLSelectElement *select = getSelect(); 193 193 if (select) 194 select->childrenChanged( );195 HTMLGenericFormElement::childrenChanged( );194 select->childrenChanged(changedByParser); 195 HTMLGenericFormElement::childrenChanged(changedByParser); 196 196 } 197 197 -
trunk/WebCore/html/HTMLOptionElement.h
r27217 r30112 69 69 HTMLSelectElement* getSelect() const; 70 70 71 virtual void childrenChanged( );71 virtual void childrenChanged(bool changedByParser = false); 72 72 73 73 bool defaultSelected() const; -
trunk/WebCore/html/HTMLParser.cpp
r30097 r30112 329 329 if (parentAttached && !n->attached() && !m_isParsingFragment) 330 330 n->attach(); 331 n->finish edParsing();331 n->finishParsingChildren(); 332 332 } 333 333 … … 1224 1224 void HTMLParser::pushBlock(const AtomicString& tagName, int level) 1225 1225 { 1226 current->beginParsingChildren(); 1226 1227 blockStack = new HTMLStackElem(tagName, level, current, didRefCurrent, blockStack); 1227 1228 didRefCurrent = false; … … 1312 1313 // Also, a few elements (<applet>, <object>) need to know when all child elements (<param>s) are available. 1313 1314 if (current && elem->node != current) 1314 current->finish edParsing();1315 current->finishParsingChildren(); 1315 1316 1316 1317 blockStack = elem->next; -
trunk/WebCore/html/HTMLScriptElement.cpp
r29918 r30112 60 60 } 61 61 62 void HTMLScriptElement::childrenChanged( )62 void HTMLScriptElement::childrenChanged(bool changedByParser) 63 63 { 64 64 // If a node is inserted as a child of the script element … … 67 67 if (!m_createdByParser && inDocument() && firstChild()) 68 68 evaluateScript(document()->url(), text()); 69 HTMLElement::childrenChanged( );69 HTMLElement::childrenChanged(changedByParser); 70 70 } 71 71 … … 96 96 } 97 97 98 void HTMLScriptElement::finish edParsing()98 void HTMLScriptElement::finishParsingChildren() 99 99 { 100 100 // The parser just reached </script>. If we have no src and no text, … … 102 102 if (getAttribute(srcAttr).isEmpty() && text().isEmpty()) 103 103 setCreatedByParser(false); 104 HTMLElement::finish edParsing();104 HTMLElement::finishParsingChildren(); 105 105 } 106 106 -
trunk/WebCore/html/HTMLScriptElement.h
r28639 r30112 45 45 virtual void notifyFinished(CachedResource*); 46 46 47 virtual void childrenChanged( );47 virtual void childrenChanged(bool changedByParser = false); 48 48 49 49 virtual bool isURLAttribute(Attribute*) const; 50 50 51 51 void setCreatedByParser(bool createdByParser) { m_createdByParser = createdByParser; } 52 virtual void finish edParsing();52 virtual void finishParsingChildren(); 53 53 54 54 bool shouldExecuteAsJavaScript(); -
trunk/WebCore/html/HTMLSelectElement.cpp
r28666 r30112 530 530 } 531 531 532 void HTMLSelectElement::childrenChanged( )532 void HTMLSelectElement::childrenChanged(bool changedByParser) 533 533 { 534 534 setRecalcListItems(); 535 HTMLFormControlElementWithState::childrenChanged( );535 HTMLFormControlElementWithState::childrenChanged(changedByParser); 536 536 } 537 537 -
trunk/WebCore/html/HTMLSelectElement.h
r28666 r30112 88 88 virtual bool appendChild(PassRefPtr<Node> newChild, ExceptionCode&); 89 89 virtual bool removeChildren(); 90 virtual void childrenChanged( );90 virtual void childrenChanged(bool changedByParser = false); 91 91 92 92 virtual void parseMappedAttribute(MappedAttribute*); -
trunk/WebCore/html/HTMLStyleElement.cpp
r29918 r30112 51 51 } 52 52 53 void HTMLStyleElement::finish edParsing()53 void HTMLStyleElement::finishParsingChildren() 54 54 { 55 55 StyleElement::sheet(this); 56 56 m_createdByParser = false; 57 HTMLElement::finish edParsing();57 HTMLElement::finishParsingChildren(); 58 58 } 59 59 … … 72 72 } 73 73 74 void HTMLStyleElement::childrenChanged( )74 void HTMLStyleElement::childrenChanged(bool changedByParser) 75 75 { 76 76 StyleElement::process(this); 77 HTMLElement::childrenChanged( );77 HTMLElement::childrenChanged(changedByParser); 78 78 } 79 79 -
trunk/WebCore/html/HTMLStyleElement.h
r25754 r30112 44 44 virtual void insertedIntoDocument(); 45 45 virtual void removedFromDocument(); 46 virtual void childrenChanged( );46 virtual void childrenChanged(bool changedByParser = false); 47 47 48 48 void setCreatedByParser(bool createdByParser) { m_createdByParser = createdByParser; } 49 virtual void finish edParsing();49 virtual void finishParsingChildren(); 50 50 51 51 virtual bool isLoading() const; -
trunk/WebCore/html/HTMLTextAreaElement.cpp
r29918 r30112 120 120 } 121 121 122 void HTMLTextAreaElement::childrenChanged( )122 void HTMLTextAreaElement::childrenChanged(bool changedByParser) 123 123 { 124 124 setValue(defaultValue()); 125 HTMLElement::childrenChanged( );125 HTMLElement::childrenChanged(changedByParser); 126 126 } 127 127 -
trunk/WebCore/html/HTMLTextAreaElement.h
r25754 r30112 62 62 void setSelectionRange(int, int); 63 63 64 virtual void childrenChanged( );64 virtual void childrenChanged(bool changedByParser = false); 65 65 virtual void parseMappedAttribute(MappedAttribute*); 66 66 virtual RenderObject* createRenderer(RenderArena*, RenderStyle*); -
trunk/WebCore/html/HTMLTitleElement.cpp
r29918 r30112 55 55 } 56 56 57 void HTMLTitleElement::childrenChanged( )57 void HTMLTitleElement::childrenChanged(bool changedByParser) 58 58 { 59 HTMLElement::childrenChanged();60 59 m_title = ""; 61 60 for (Node* c = firstChild(); c != 0; c = c->nextSibling()) … … 64 63 if (inDocument()) 65 64 document()->setTitle(m_title, this); 66 HTMLElement::childrenChanged( );65 HTMLElement::childrenChanged(changedByParser); 67 66 } 68 67 -
trunk/WebCore/html/HTMLTitleElement.h
r25754 r30112 39 39 virtual void insertedIntoDocument(); 40 40 virtual void removedFromDocument(); 41 virtual void childrenChanged( );41 virtual void childrenChanged(bool changedByParser = false); 42 42 43 43 String text() const; -
trunk/WebCore/svg/SVGAnimationElement.cpp
r29951 r30112 391 391 } 392 392 393 void SVGAnimationElement::finishedParsing() 394 { 395 ownerSVGElement()->timeScheduler()->addTimer(this, lround(getStartTime())); 396 SVGElement::finishedParsing(); 393 void SVGAnimationElement::finishParsingChildren() 394 { 395 if (ownerSVGElement()) 396 ownerSVGElement()->timeScheduler()->addTimer(this, lround(getStartTime())); 397 SVGElement::finishParsingChildren(); 397 398 } 398 399 -
trunk/WebCore/svg/SVGAnimationElement.h
r25754 r30112 99 99 virtual void parseMappedAttribute(MappedAttribute* attr); 100 100 101 virtual void finish edParsing();101 virtual void finishParsingChildren(); 102 102 103 103 virtual bool updateAnimationBaseValueFromElement(); -
trunk/WebCore/svg/SVGClipPathElement.cpp
r29951 r30112 82 82 } 83 83 84 void SVGClipPathElement::childrenChanged( )84 void SVGClipPathElement::childrenChanged(bool changedByParser) 85 85 { 86 SVGStyledTransformableElement::childrenChanged( );86 SVGStyledTransformableElement::childrenChanged(changedByParser); 87 87 88 88 if (!m_clipper) -
trunk/WebCore/svg/SVGClipPathElement.h
r29951 r30112 47 47 virtual void parseMappedAttribute(MappedAttribute*); 48 48 virtual void svgAttributeChanged(const QualifiedName&); 49 virtual void childrenChanged( );49 virtual void childrenChanged(bool changedByParser = false); 50 50 51 51 virtual SVGResource* canvasResource(); -
trunk/WebCore/svg/SVGDefinitionSrcElement.cpp
r29663 r30112 33 33 } 34 34 35 void SVGDefinitionSrcElement::childrenChanged( )35 void SVGDefinitionSrcElement::childrenChanged(bool changedByParser) 36 36 { 37 SVGElement::childrenChanged(changedByParser); 37 38 if (parentNode() && parentNode()->hasTagName(SVGNames::font_faceTag)) 38 39 static_cast<SVGFontFaceElement*>(parentNode())->rebuildFontFace(); -
trunk/WebCore/svg/SVGDefinitionSrcElement.h
r29663 r30112 29 29 SVGDefinitionSrcElement(const QualifiedName&, Document*); 30 30 31 virtual void childrenChanged( );31 virtual void childrenChanged(bool changedByParser = false); 32 32 }; 33 33 -
trunk/WebCore/svg/SVGElement.cpp
r29951 r30112 175 175 } 176 176 177 void SVGElement::finish edParsing()178 { 179 // finish edParsing() is called when the close tag is reached for an element (e.g. </svg>)177 void SVGElement::finishParsingChildren() 178 { 179 // finishParsingChildren() is called when the close tag is reached for an element (e.g. </svg>) 180 180 // we send SVGLoad events here if we can, otherwise they'll be sent when any required loads finish 181 181 sendSVGLoadEventIfPossible(); -
trunk/WebCore/svg/SVGElement.h
r29951 r30112 214 214 virtual bool isValid() const { return true; } 215 215 216 virtual void finish edParsing();216 virtual void finishParsingChildren(); 217 217 virtual bool rendererIsNeeded(RenderStyle*) { return false; } 218 218 virtual bool childShouldCreateRenderer(Node*) const; -
trunk/WebCore/svg/SVGFontFaceElement.cpp
r29839 r30112 360 360 } 361 361 362 void SVGFontFaceElement::childrenChanged() 363 { 362 void SVGFontFaceElement::childrenChanged(bool changedByParser) 363 { 364 SVGElement::childrenChanged(changedByParser); 364 365 rebuildFontFace(); 365 366 } -
trunk/WebCore/svg/SVGFontFaceElement.h
r29700 r30112 38 38 virtual void parseMappedAttribute(MappedAttribute*); 39 39 40 virtual void childrenChanged( );40 virtual void childrenChanged(bool changedByParser = false); 41 41 virtual void insertedIntoDocument(); 42 42 -
trunk/WebCore/svg/SVGFontFaceFormatElement.cpp
r29663 r30112 35 35 } 36 36 37 void SVGFontFaceFormatElement::childrenChanged( )37 void SVGFontFaceFormatElement::childrenChanged(bool changedByParser) 38 38 { 39 SVGElement::childrenChanged(changedByParser); 40 39 41 if (!parentNode() || !parentNode()->hasTagName(font_face_uriTag)) 40 42 return; -
trunk/WebCore/svg/SVGFontFaceFormatElement.h
r29663 r30112 30 30 SVGFontFaceFormatElement(const QualifiedName&, Document*); 31 31 32 virtual void childrenChanged( );32 virtual void childrenChanged(bool changedByParser = false); 33 33 }; 34 34 -
trunk/WebCore/svg/SVGFontFaceSrcElement.cpp
r29663 r30112 51 51 } 52 52 53 void SVGFontFaceSrcElement::childrenChanged( )53 void SVGFontFaceSrcElement::childrenChanged(bool changedByParser) 54 54 { 55 SVGElement::childrenChanged(changedByParser); 55 56 if (parentNode() && parentNode()->hasTagName(font_faceTag)) 56 57 static_cast<SVGFontFaceElement*>(parentNode())->rebuildFontFace(); -
trunk/WebCore/svg/SVGFontFaceSrcElement.h
r29663 r30112 32 32 PassRefPtr<CSSValueList> srcValue() const; 33 33 34 virtual void childrenChanged( );34 virtual void childrenChanged(bool changedByParser = false); 35 35 }; 36 36 -
trunk/WebCore/svg/SVGFontFaceUriElement.cpp
r29839 r30112 45 45 } 46 46 47 void SVGFontFaceUriElement::childrenChanged( )47 void SVGFontFaceUriElement::childrenChanged(bool changedByParser) 48 48 { 49 SVGElement::childrenChanged(changedByParser); 50 49 51 if (!parentNode() || !parentNode()->hasTagName(font_face_srcTag)) 50 52 return; -
trunk/WebCore/svg/SVGFontFaceUriElement.h
r29663 r30112 32 32 PassRefPtr<CSSFontFaceSrcValue> srcValue() const; 33 33 34 virtual void childrenChanged( );34 virtual void childrenChanged(bool changedByParser = false); 35 35 }; 36 36 -
trunk/WebCore/svg/SVGGElement.cpp
r29951 r30112 68 68 } 69 69 70 void SVGGElement::childrenChanged( )70 void SVGGElement::childrenChanged(bool changedByParser) 71 71 { 72 SVGStyledTransformableElement::childrenChanged( );72 SVGStyledTransformableElement::childrenChanged(changedByParser); 73 73 74 74 if (renderer()) -
trunk/WebCore/svg/SVGGElement.h
r29951 r30112 44 44 virtual void parseMappedAttribute(MappedAttribute*); 45 45 virtual void svgAttributeChanged(const QualifiedName&); 46 virtual void childrenChanged( );46 virtual void childrenChanged(bool changedByParser = false); 47 47 48 48 virtual RenderObject* createRenderer(RenderArena*, RenderStyle*); -
trunk/WebCore/svg/SVGGradientElement.cpp
r29951 r30112 103 103 } 104 104 105 void SVGGradientElement::childrenChanged( )105 void SVGGradientElement::childrenChanged(bool changedByParser) 106 106 { 107 SVGStyledElement::childrenChanged( );107 SVGStyledElement::childrenChanged(changedByParser); 108 108 109 109 if (m_resource) -
trunk/WebCore/svg/SVGGradientElement.h
r29951 r30112 52 52 virtual void svgAttributeChanged(const QualifiedName&); 53 53 54 virtual void childrenChanged( );54 virtual void childrenChanged(bool changedByParser = false); 55 55 virtual RenderObject* createRenderer(RenderArena*, RenderStyle*); 56 56 -
trunk/WebCore/svg/SVGMarkerElement.cpp
r29951 r30112 121 121 } 122 122 123 void SVGMarkerElement::childrenChanged( )123 void SVGMarkerElement::childrenChanged(bool changedByParser) 124 124 { 125 SVGStyledElement::childrenChanged( );125 SVGStyledElement::childrenChanged(changedByParser); 126 126 127 127 if (renderer()) -
trunk/WebCore/svg/SVGMarkerElement.h
r29951 r30112 61 61 virtual void parseMappedAttribute(MappedAttribute*); 62 62 virtual void svgAttributeChanged(const QualifiedName&); 63 virtual void childrenChanged( );63 virtual void childrenChanged(bool changedByParser = false); 64 64 65 65 virtual RenderObject* createRenderer(RenderArena*, RenderStyle*); -
trunk/WebCore/svg/SVGMaskElement.cpp
r29951 r30112 127 127 } 128 128 129 void SVGMaskElement::childrenChanged( )130 { 131 SVGStyledElement::childrenChanged( );129 void SVGMaskElement::childrenChanged(bool changedByParser) 130 { 131 SVGStyledElement::childrenChanged(changedByParser); 132 132 133 133 if (!m_masker) -
trunk/WebCore/svg/SVGMaskElement.h
r29951 r30112 47 47 virtual void parseMappedAttribute(MappedAttribute*); 48 48 virtual void svgAttributeChanged(const QualifiedName&); 49 virtual void childrenChanged( );49 virtual void childrenChanged(bool changedByParser = false); 50 50 51 51 virtual RenderObject* createRenderer(RenderArena*, RenderStyle*); -
trunk/WebCore/svg/SVGPatternElement.cpp
r29951 r30112 145 145 } 146 146 147 void SVGPatternElement::childrenChanged( )148 { 149 SVGStyledElement::childrenChanged( );147 void SVGPatternElement::childrenChanged(bool changedByParser) 148 { 149 SVGStyledElement::childrenChanged(changedByParser); 150 150 151 151 if (!m_resource) -
trunk/WebCore/svg/SVGPatternElement.h
r29951 r30112 55 55 virtual void parseMappedAttribute(MappedAttribute*); 56 56 virtual void svgAttributeChanged(const QualifiedName&); 57 virtual void childrenChanged( );57 virtual void childrenChanged(bool changedByParser = false); 58 58 59 59 virtual RenderObject* createRenderer(RenderArena*, RenderStyle*); -
trunk/WebCore/svg/SVGStyleElement.cpp
r28567 r30112 94 94 } 95 95 96 void SVGStyleElement::finish edParsing()96 void SVGStyleElement::finishParsingChildren() 97 97 { 98 98 StyleElement::sheet(this); 99 99 m_createdByParser = false; 100 SVGElement::finish edParsing();100 SVGElement::finishParsingChildren(); 101 101 } 102 102 … … 115 115 } 116 116 117 void SVGStyleElement::childrenChanged( )117 void SVGStyleElement::childrenChanged(bool changedByParser) 118 118 { 119 SVGElement::childrenChanged(changedByParser); 119 120 StyleElement::process(this); 120 121 } -
trunk/WebCore/svg/SVGStyleElement.h
r25754 r30112 38 38 virtual void insertedIntoDocument(); 39 39 virtual void removedFromDocument(); 40 virtual void childrenChanged( );40 virtual void childrenChanged(bool changedByParser = false); 41 41 42 42 void setCreatedByParser(bool createdByParser) { m_createdByParser = createdByParser; } 43 virtual void finish edParsing();43 virtual void finishParsingChildren(); 44 44 45 45 // 'SVGStyleElement' functions -
trunk/WebCore/svg/SVGStyledElement.cpp
r29951 r30112 225 225 } 226 226 227 void SVGStyledElement::childrenChanged( )228 { 229 SVGElement::childrenChanged( );227 void SVGStyledElement::childrenChanged(bool changedByParser) 228 { 229 SVGElement::childrenChanged(changedByParser); 230 230 if (document()->parsing()) 231 231 return; -
trunk/WebCore/svg/SVGStyledElement.h
r29951 r30112 56 56 virtual void svgAttributeChanged(const QualifiedName&); 57 57 58 virtual void childrenChanged( );58 virtual void childrenChanged(bool changedByParser = false); 59 59 60 60 // Centralized place to force a manual style resolution. Hacky but needed for now. -
trunk/WebCore/svg/SVGTitleElement.cpp
r25754 r30112 47 47 } 48 48 49 void SVGTitleElement::childrenChanged( )49 void SVGTitleElement::childrenChanged(bool changedByParser) 50 50 { 51 SVGElement::childrenChanged( );51 SVGElement::childrenChanged(changedByParser); 52 52 if (inDocument()) 53 53 document()->setTitle(textContent(), this); -
trunk/WebCore/svg/SVGTitleElement.h
r25754 r30112 38 38 virtual void insertedIntoDocument(); 39 39 virtual void removedFromDocument(); 40 virtual void childrenChanged( );40 virtual void childrenChanged(bool changedByParser = false); 41 41 42 42 virtual bool rendererIsNeeded(RenderStyle*) { return false; } -
trunk/WebCore/svg/SVGUseElement.cpp
r29951 r30112 149 149 } 150 150 151 void SVGUseElement::childrenChanged() 152 { 151 void SVGUseElement::childrenChanged(bool changedByParser) 152 { 153 SVGElement::childrenChanged(changedByParser); 154 153 155 if (!attached()) 154 156 return; -
trunk/WebCore/svg/SVGUseElement.h
r29951 r30112 55 55 56 56 virtual void parseMappedAttribute(MappedAttribute*); 57 virtual void childrenChanged( );57 virtual void childrenChanged(bool changedByParser = false); 58 58 59 59 virtual void svgAttributeChanged(const QualifiedName&);
Note: See TracChangeset
for help on using the changeset viewer.