Skip to content
  • commit-queue@webkit.org's avatar
    Add infrastructure for :before and :after in DOM · fb6d226c
    commit-queue@webkit.org authored
    https://bugs.webkit.org/show_bug.cgi?id=103705
    
    Patch by Elliott Sprehn <esprehn@chromium.org> on 2012-12-05
    Reviewed by Eric Seidel.
    
    Add all infrastructure for reimplementing generated content :before and
    :after as DOM Elements. Now ElementRareData has two pointers to PseudoElements
    for the generated content and Node has methods for traversing the tree
    including generated content.
    
    This will allow the generated content to be treated as real nodes instead
    of anonymous and take part in the usual recalcStyle and attach flow which
    fixes many bugs and vastly simplifies the ifecycle of generated content.
    
    Instead of attempting to land both the infrastructure and enable it at
    the same time which has proven problematic due to how drastic this change
    is, this patch contains only the support code so a much smaller future
    patch can be used to switch it on.
    
    No new behavior, this is just the infrastructure.
    
    * CMakeLists.txt:
    * GNUmakefile.list.am:
    * Target.pri:
    * WebCore.gypi:
    * WebCore.vcproj/WebCore.vcproj:
    * WebCore.xcodeproj/project.pbxproj:
    * dom/DOMAllInOne.cpp:
    * dom/Element.cpp:
    (WebCore::Element::~Element):
    (WebCore::Element::detach):
    (WebCore::Element::updatePseudoElement):
    (WebCore::Element::createPseudoElementIfNeeded):
    (WebCore::Element::beforePseudoElement):
    (WebCore::Element::afterPseudoElement):
    * dom/Element.h:
    (Element):
    * dom/ElementRareData.h:
    (ElementRareData):
    (WebCore::ElementRareData::ElementRareData):
    (WebCore::ElementRareData::~ElementRareData):
    (WebCore::ElementRareData::setPseudoElement):
    (WebCore::ElementRareData::pseudoElement):
    (WebCore::ElementRareData::releasePseudoElement):
    * dom/Node.cpp:
    (WebCore::Node::pseudoAwarePreviousSibling):
    (WebCore::Node::pseudoAwareNextSibling):
    (WebCore::Node::rendererIsEditable):
    (WebCore::checkAcceptChild):
    * dom/Node.h:
    (Node):
    (WebCore::Node::isPseudoElement):
    (WebCore::Node::isBeforePseudoElement):
    (WebCore::Node::isAfterPseudoElement):
    (WebCore::Node::pseudoId):
    (WebCore::Node::customPseudoId):
    * dom/NodeRenderingContext.cpp:
    (WebCore::NodeRenderingContext::nextRenderer):
    (WebCore::NodeRenderingContext::previousRenderer):
    * dom/Position.cpp:
    (WebCore::Position::hasRenderedNonAnonymousDescendantsWithHeight):
    * dom/PseudoElement.cpp: Added.
    (WebCore::pseudoElementTagName):
    (WebCore::PseudoElement::PseudoElement):
    (WebCore::PseudoElement::customStyleForRenderer):
    (WebCore::PseudoElement::attach):
    (WebCore::PseudoElement::rendererIsNeeded):
    (WebCore::PseudoElement::updateChildStyle):
    (WebCore::PseudoElement::didRecalcStyle):
    * dom/PseudoElement.h: Added.
    (PseudoElement):
    (WebCore::PseudoElement::create):
    (WebCore::pseudoElementIsNeeded):
    * editing/visible_units.cpp:
    (WebCore::logicallyPreviousBox):
    (WebCore::logicallyNextBox):
    (WebCore::startPositionForLine):
    (WebCore::endPositionForLine):
    * page/animation/AnimationController.cpp:
    (WebCore::AnimationController::updateAnimations):
    * rendering/HitTestResult.cpp:
    (WebCore::HitTestResult::setInnerNode):
    (WebCore::HitTestResult::setInnerNonSharedNode):
    * rendering/RenderBlock.cpp:
    (WebCore::RenderBlock::isSelectionRoot):
    (WebCore::RenderBlock::renderName):
    * rendering/RenderCounter.cpp:
    (WebCore::RenderCounter::originalText):
    * rendering/RenderDeprecatedFlexibleBox.cpp:
    (WebCore::RenderDeprecatedFlexibleBox::renderName):
    * rendering/RenderInline.cpp:
    (WebCore::RenderInline::renderName):
    * rendering/RenderMultiColumnBlock.cpp:
    (WebCore::RenderMultiColumnBlock::renderName):
    * rendering/RenderObject.cpp:
    (WebCore::RenderObject::createObject):
    (WebCore::RenderObject::setPseudoStyle):
    (WebCore::RenderObject::createVisiblePosition):
    * rendering/RenderObject.h:
    (WebCore::RenderObject::isPseudoElement):
    (RenderObject):
    (WebCore::RenderObject::generatingNode):
    * rendering/RenderTableCell.h:
    (WebCore::RenderTableCell::renderName):
    * rendering/RenderTableRow.h:
    (WebCore::RenderTableRow::renderName):
    * rendering/RenderTableSection.h:
    (WebCore::RenderTableSection::renderName):
    * rendering/RenderTreeAsText.cpp:
    (WebCore::RenderTreeAsText::writeRenderObject):
    * rendering/style/ContentData.cpp:
    (WebCore::ImageContentData::createRenderer):
    (WebCore::TextContentData::createRenderer):
    (WebCore::CounterContentData::createRenderer):
    (WebCore::QuoteContentData::createRenderer):
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@136744 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    fb6d226c