Changeset 106323 in webkit
- Timestamp:
- Jan 30, 2012 7:53:40 PM (12 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 added
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/CMakeLists.txt
r106217 r106323 547 547 dom/EditingText.cpp 548 548 dom/Element.cpp 549 dom/ElementAttributeData.cpp 549 550 dom/EntityReference.cpp 550 551 dom/ErrorEvent.cpp -
trunk/Source/WebCore/ChangeLog
r106320 r106323 1 2012-01-30 Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org> 2 3 Add ElementAttributeData class to replace internal uses of NamedNodeMap 4 https://bugs.webkit.org/show_bug.cgi?id=77233 5 6 Reviewed by Andreas Kling. 7 8 Move part of non-DOM functionality of NamedNodeMap into a separate class. This is 9 the first step toward the goal of separating NamedNodeMap from internal attribute 10 storage, as described in https://bugs.webkit.org/show_bug.cgi?id=75069. 11 12 The internal attribute storage is exposed as attributeData() in Element, and when 13 necessary (because it has no back pointer to Element) via methods in Element. 14 15 No new tests. Except from setClass() change this is just moving the code, no new 16 feature was added. 17 18 * CMakeLists.txt: 19 * GNUmakefile.list.am: 20 * Target.pri: 21 * WebCore.gypi: 22 * WebCore.xcodeproj/project.pbxproj: 23 * dom/DOMAllInOne.cpp: 24 * dom/Element.cpp: 25 (WebCore::Element::idAttributeChanged): 26 * dom/Element.h: 27 (WebCore::Element::attributeData): 28 (WebCore::Element::ensureAttributeData): 29 (Element): 30 (WebCore::Element::idForStyleResolution): 31 * dom/ElementAttributeData.cpp: Added. 32 (WebCore): 33 (WebCore::ElementAttributeData::setClass): the only caller of this function 34 already deal with the case when the element has no class, so don't do it here. 35 * dom/ElementAttributeData.h: Added. 36 (WebCore): 37 (ElementAttributeData): 38 (WebCore::ElementAttributeData::clearClass): 39 (WebCore::ElementAttributeData::classNames): 40 (WebCore::ElementAttributeData::idForStyleResolution): 41 (WebCore::ElementAttributeData::setIdForStyleResolution): 42 (WebCore::ElementAttributeData::ElementAttributeData): 43 * dom/NamedNodeMap.cpp: 44 (WebCore::NamedNodeMap::clearAttributes): 45 * dom/NamedNodeMap.h: 46 (WebCore::NamedNodeMap::attributeData): 47 (NamedNodeMap): 48 * dom/StyledElement.cpp: 49 (WebCore::StyledElement::classAttributeChanged): 50 * dom/StyledElement.h: 51 (WebCore::StyledElement::classNames): 52 * html/ClassList.cpp: 53 (WebCore::ClassList::classNames): 54 1 55 2012-01-30 Gregg Tavares <gman@chromium.org> 2 56 -
trunk/Source/WebCore/GNUmakefile.list.am
r106240 r106323 1534 1534 Source/WebCore/dom/Element.cpp \ 1535 1535 Source/WebCore/dom/Element.h \ 1536 Source/WebCore/dom/ElementAttributeData.cpp \ 1537 Source/WebCore/dom/ElementAttributeData.h \ 1536 1538 Source/WebCore/dom/ElementRareData.h \ 1537 1539 Source/WebCore/dom/Entity.h \ -
trunk/Source/WebCore/Target.pri
r106223 r106323 510 510 dom/EditingText.cpp \ 511 511 dom/Element.cpp \ 512 dom/ElementAttributeData.cpp \ 512 513 dom/EntityReference.cpp \ 513 514 dom/ErrorEvent.cpp \ … … 1623 1624 dom/EditingText.h \ 1624 1625 dom/Element.h \ 1626 dom/ElementAttributeData.h \ 1625 1627 dom/Entity.h \ 1626 1628 dom/EntityReference.h \ -
trunk/Source/WebCore/WebCore.gypi
r106223 r106323 596 596 'dom/DocumentType.h', 597 597 'dom/Element.h', 598 'dom/ElementAttributeData.h', 598 599 'dom/Event.h', 599 600 'dom/EventListener.h', … … 4995 4996 'dom/EditingText.h', 4996 4997 'dom/Element.cpp', 4998 'dom/ElementAttributeData.cpp', 4997 4999 'dom/ElementRareData.h', 4998 5000 'dom/Entity.h', -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r106223 r106323 734 734 2BE8E2C712A589EC00FAD550 /* HTMLMetaCharsetParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BE8E2C612A589EC00FAD550 /* HTMLMetaCharsetParser.h */; }; 735 735 2BE8E2C912A58A0100FAD550 /* HTMLMetaCharsetParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BE8E2C812A58A0100FAD550 /* HTMLMetaCharsetParser.cpp */; }; 736 2CF6878814D32EB500340F39 /* ElementAttributeData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2CF6878714D32EB500340F39 /* ElementAttributeData.cpp */; }; 737 2CF6878A14D32EFF00340F39 /* ElementAttributeData.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CF6878914D32EFF00340F39 /* ElementAttributeData.h */; settings = {ATTRIBUTES = (Private, ); }; }; 736 738 2D3A0E3613A7D76100E85AF0 /* SVGParsingError.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D3A0E3513A7D76100E85AF0 /* SVGParsingError.h */; settings = {ATTRIBUTES = (Private, ); }; }; 737 739 2D481F00146B5C4C00AA7834 /* CrossfadeGeneratedImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2D2FC0541460CD6F00263633 /* CrossfadeGeneratedImage.cpp */; }; … … 7480 7482 2BE8E2C612A589EC00FAD550 /* HTMLMetaCharsetParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HTMLMetaCharsetParser.h; path = parser/HTMLMetaCharsetParser.h; sourceTree = "<group>"; }; 7481 7483 2BE8E2C812A58A0100FAD550 /* HTMLMetaCharsetParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = HTMLMetaCharsetParser.cpp; path = parser/HTMLMetaCharsetParser.cpp; sourceTree = "<group>"; }; 7484 2CF6878714D32EB500340F39 /* ElementAttributeData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ElementAttributeData.cpp; sourceTree = "<group>"; }; 7485 2CF6878914D32EFF00340F39 /* ElementAttributeData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ElementAttributeData.h; sourceTree = "<group>"; }; 7482 7486 2D2FC0541460CD6F00263633 /* CrossfadeGeneratedImage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CrossfadeGeneratedImage.cpp; sourceTree = "<group>"; }; 7483 7487 2D2FC0551460CD6F00263633 /* CrossfadeGeneratedImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CrossfadeGeneratedImage.h; sourceTree = "<group>"; }; … … 20453 20457 A8C4A7F509D563270003AC8D /* Element.h */, 20454 20458 93EEC1EA09C2877700C515D1 /* Element.idl */, 20459 2CF6878714D32EB500340F39 /* ElementAttributeData.cpp */, 20460 2CF6878914D32EFF00340F39 /* ElementAttributeData.h */, 20455 20461 637B7ADE0E8767B800E32194 /* ElementRareData.h */, 20456 20462 A8EA7EBA0A1945D000A8EF5F /* Entity.h */, … … 24102 24108 8AD0A59814C88358000D83C5 /* DOMWebKitCSSRegionRuleInternal.h in Headers */, 24103 24109 0720B0A114D3323500642955 /* GenericEventQueue.h in Headers */, 24110 2CF6878A14D32EFF00340F39 /* ElementAttributeData.h in Headers */, 24104 24111 ); 24105 24112 runOnlyForDeploymentPostprocessing = 0; … … 27031 27038 573D134714CE39FF0057ABCA /* InspectorTypeBuilder.cpp in Sources */, 27032 27039 0720B0A014D3323500642955 /* GenericEventQueue.cpp in Sources */, 27040 2CF6878814D32EB500340F39 /* ElementAttributeData.cpp in Sources */, 27033 27041 ); 27034 27042 runOnlyForDeploymentPostprocessing = 0; -
trunk/Source/WebCore/dom/DOMAllInOne.cpp
r105249 r106323 68 68 #include "EditingText.cpp" 69 69 #include "Element.cpp" 70 #include "ElementAttributeData.cpp" 70 71 #include "EntityReference.cpp" 71 72 #include "ErrorEvent.cpp" -
trunk/Source/WebCore/dom/Element.cpp
r105849 r106323 711 711 { 712 712 setHasID(!attr->isNull()); 713 if (attribute Map()) {713 if (attributeData()) { 714 714 if (attr->isNull()) 715 attribute Map()->setIdForStyleResolution(nullAtom);715 attributeData()->setIdForStyleResolution(nullAtom); 716 716 else if (document()->inQuirksMode()) 717 attribute Map()->setIdForStyleResolution(attr->value().lower());717 attributeData()->setIdForStyleResolution(attr->value().lower()); 718 718 else 719 attribute Map()->setIdForStyleResolution(attr->value());719 attributeData()->setIdForStyleResolution(attr->value()); 720 720 } 721 721 setNeedsStyleRecalc(); -
trunk/Source/WebCore/dom/Element.h
r105849 r106323 225 225 NamedNodeMap* attributeMap() const { return m_attributeMap.get(); } 226 226 227 ElementAttributeData* attributeData() const { return m_attributeMap ? m_attributeMap->attributeData() : 0; } 228 ElementAttributeData* ensureAttributeData() const { return attributes()->attributeData(); } 229 227 230 void setAttributesFromElement(const Element&); 228 231 … … 573 576 { 574 577 ASSERT(hasID()); 575 return m_attributeMap->idForStyleResolution();578 return attributeData()->idForStyleResolution(); 576 579 } 577 580 -
trunk/Source/WebCore/dom/NamedNodeMap.cpp
r106201 r106323 201 201 void NamedNodeMap::clearAttributes() 202 202 { 203 m_classNames.clear();203 attributeData()->clearClass(); 204 204 detachAttributesFromElement(); 205 205 m_attributes.clear(); … … 302 302 } 303 303 304 void NamedNodeMap::setClass(const String& classStr)305 {306 if (!element()->hasClass()) {307 m_classNames.clear();308 return;309 }310 311 m_classNames.set(classStr, element()->document()->inQuirksMode());312 }313 314 304 bool NamedNodeMap::mapsEquivalent(const NamedNodeMap* otherMap) const 315 305 { -
trunk/Source/WebCore/dom/NamedNodeMap.h
r106201 r106323 27 27 28 28 #include "Attribute.h" 29 #include "ElementAttributeData.h" 29 30 #include "SpaceSplitString.h" 30 31 #include <wtf/NotFound.h> … … 85 86 } 86 87 87 const AtomicString& idForStyleResolution() const { return m_idForStyleResolution; }88 void setIdForStyleResolution(const AtomicString& newId) { m_idForStyleResolution = newId; }89 90 88 bool mapsEquivalent(const NamedNodeMap* otherMap) const; 91 89 … … 97 95 Element* element() const { return m_element; } 98 96 99 void clearClass() { m_classNames.clear(); } 100 void setClass(const String&); 101 const SpaceSplitString& classNames() const { return m_classNames; } 97 size_t mappedAttributeCount() const; 102 98 103 size_t mappedAttributeCount() const; 99 ElementAttributeData* attributeData() { return &m_attributeData; } 100 const ElementAttributeData* attributeData() const { return &m_attributeData; } 104 101 105 102 private: … … 118 115 void replaceAttribute(size_t index, PassRefPtr<Attribute>); 119 116 120 SpaceSplitString m_classNames; 117 // FIXME: NamedNodeMap is being broken up into two classes, one containing data 118 // for elements with attributes, and one for exposure to the DOM. 119 // See <http://webkit.org/b/75069> for more information. 120 ElementAttributeData m_attributeData; 121 121 122 Element* m_element; 122 123 Vector<RefPtr<Attribute>, 4> m_attributes; 123 AtomicString m_idForStyleResolution;124 124 }; 125 125 -
trunk/Source/WebCore/dom/StyledElement.cpp
r106247 r106323 216 216 setHasClass(hasClass); 217 217 if (hasClass) { 218 attributes()->setClass(newClassString); 218 const bool shouldFoldCase = document()->inQuirksMode(); 219 ensureAttributeData()->setClass(newClassString, shouldFoldCase); 219 220 if (DOMTokenList* classList = optionalClassList()) 220 221 static_cast<ClassList*>(classList)->reset(newClassString); 221 } else if (attribute Map())222 attribute Map()->clearClass();222 } else if (attributeData()) 223 attributeData()->clearClass(); 223 224 setNeedsStyleRecalc(); 224 225 dispatchSubtreeModifiedEvent(); -
trunk/Source/WebCore/dom/StyledElement.h
r106201 r106323 99 99 { 100 100 ASSERT(hasClass()); 101 ASSERT(attribute Map());102 return attribute Map()->classNames();101 ASSERT(attributeData()); 102 return attributeData()->classNames(); 103 103 } 104 104 -
trunk/Source/WebCore/html/ClassList.cpp
r97670 r106323 141 141 if (!m_classNamesForQuirksMode.isNull()) 142 142 return m_classNamesForQuirksMode; 143 return m_element->attribute Map()->classNames();143 return m_element->attributeData()->classNames(); 144 144 } 145 145
Note: See TracChangeset
for help on using the changeset viewer.