Changeset 77211 in webkit


Ignore:
Timestamp:
Jan 31, 2011 8:05:52 PM (13 years ago)
Author:
morrita@google.com
Message:

2011-01-27 MORITA Hajime <morrita@google.com>

Reviewed by Dimitri Glazkov.

Convert <progress> shadow DOM to a DOM-based shadow.
https://bugs.webkit.org/show_bug.cgi?id=50660

  • Removed RenderProgress::m_valuePart, moved the shadow node to the shadow root of HTMLProgressElement.
  • Removed hard-coded pseudo ID for -webkit-progress-bar-value. ProgressBarValueElement is defined only for overriding shadowPseudoId().

No new tests. No behavioral change.

  • css/CSSSelector.cpp: (WebCore::CSSSelector::pseudoId): (WebCore::nameToPseudoTypeMap): (WebCore::CSSSelector::extractPseudoType):
  • css/CSSSelector.h:
  • html/HTMLProgressElement.cpp: (WebCore::ProgressBarValueElement::ProgressBarValueElement): (WebCore::ProgressBarValueElement::shadowPseudoId): (WebCore::ProgressBarValueElement::create): (WebCore::ProgressBarValueElement::detach): (WebCore::HTMLProgressElement::parseMappedAttribute): (WebCore::HTMLProgressElement::attach): (WebCore::HTMLProgressElement::valuePart): (WebCore::HTMLProgressElement::didElementStateChange): (WebCore::HTMLProgressElement::createShadowSubtreeIfNeeded):
  • html/HTMLProgressElement.h:
  • rendering/RenderProgress.cpp: (WebCore::RenderProgress::~RenderProgress): (WebCore::RenderProgress::updateFromElement): (WebCore::RenderProgress::layoutParts): (WebCore::RenderProgress::shouldHaveParts): (WebCore::RenderProgress::valuePart):
  • rendering/RenderProgress.h:
  • rendering/style/RenderStyleConstants.h:
Location:
trunk/Source/WebCore
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r77210 r77211  
     12011-01-27  MORITA Hajime  <morrita@google.com>
     2
     3        Reviewed by Dimitri Glazkov.
     4       
     5        Convert <progress> shadow DOM to a DOM-based shadow.
     6        https://bugs.webkit.org/show_bug.cgi?id=50660
     7
     8        * Removed RenderProgress::m_valuePart, moved the shadow node
     9          to the shadow root of HTMLProgressElement.
     10        * Removed hard-coded pseudo ID for -webkit-progress-bar-value.
     11          ProgressBarValueElement is defined only for overriding
     12          shadowPseudoId().
     13       
     14        No new tests. No behavioral change.
     15
     16        * css/CSSSelector.cpp:
     17        (WebCore::CSSSelector::pseudoId):
     18        (WebCore::nameToPseudoTypeMap):
     19        (WebCore::CSSSelector::extractPseudoType):
     20        * css/CSSSelector.h:
     21        * html/HTMLProgressElement.cpp:
     22        (WebCore::ProgressBarValueElement::ProgressBarValueElement):
     23        (WebCore::ProgressBarValueElement::shadowPseudoId):
     24        (WebCore::ProgressBarValueElement::create):
     25        (WebCore::ProgressBarValueElement::detach):
     26        (WebCore::HTMLProgressElement::parseMappedAttribute):
     27        (WebCore::HTMLProgressElement::attach):
     28        (WebCore::HTMLProgressElement::valuePart):
     29        (WebCore::HTMLProgressElement::didElementStateChange):
     30        (WebCore::HTMLProgressElement::createShadowSubtreeIfNeeded):
     31        * html/HTMLProgressElement.h:
     32        * rendering/RenderProgress.cpp:
     33        (WebCore::RenderProgress::~RenderProgress):
     34        (WebCore::RenderProgress::updateFromElement):
     35        (WebCore::RenderProgress::layoutParts):
     36        (WebCore::RenderProgress::shouldHaveParts):
     37        (WebCore::RenderProgress::valuePart):
     38        * rendering/RenderProgress.h:
     39        * rendering/style/RenderStyleConstants.h:
     40
    1412011-01-31  Charlie Reis  <creis@chromium.org>
    242
  • trunk/Source/WebCore/css/CSSSelector.cpp

    r77112 r77211  
    169169    case PseudoOuterSpinButton:
    170170        return OUTER_SPIN_BUTTON;
    171     case PseudoProgressBarValue:
    172 #if ENABLE(PROGRESS_TAG)
    173         return PROGRESS_BAR_VALUE;
    174 #else
    175         ASSERT_NOT_REACHED();
    176         return NOPSEUDO;
    177 #endif
    178 
    179171#if ENABLE(METER_TAG)
    180172    case PseudoMeterHorizontalBar:
     
    336328    DEFINE_STATIC_LOCAL(AtomicString, optional, ("optional"));
    337329    DEFINE_STATIC_LOCAL(AtomicString, outerSpinButton, ("-webkit-outer-spin-button"));
    338 #if ENABLE(PROGRESS_TAG)
    339     DEFINE_STATIC_LOCAL(AtomicString, progressBarValue, ("-webkit-progress-bar-value"));
    340 #endif
    341 
    342330#if ENABLE(METER_TAG)
    343331    DEFINE_STATIC_LOCAL(AtomicString, meterHorizontalBar, ("-webkit-meter-horizontal-bar"));
     
    443431        nameToPseudoType->set(nthLastOfType.impl(), CSSSelector::PseudoNthLastOfType);
    444432        nameToPseudoType->set(outerSpinButton.impl(), CSSSelector::PseudoOuterSpinButton);
    445 #if ENABLE(PROGRESS_TAG)
    446         nameToPseudoType->set(progressBarValue.impl(), CSSSelector::PseudoProgressBarValue);
    447 #endif
    448433#if ENABLE(METER_TAG)
    449434        nameToPseudoType->set(meterHorizontalBar.impl(), CSSSelector::PseudoMeterHorizontalBar);
     
    545530    case PseudoMeterVerticalEvenLessGood:
    546531    case PseudoOuterSpinButton:
    547     case PseudoProgressBarValue:
    548532    case PseudoResizer:
    549533    case PseudoScrollbar:
  • trunk/Source/WebCore/css/CSSSelector.h

    r77112 r77211  
    196196            PseudoInnerSpinButton,
    197197            PseudoOuterSpinButton,
    198             PseudoProgressBarValue,
    199198            PseudoLeftPage,
    200199            PseudoRightPage,
  • trunk/Source/WebCore/html/HTMLProgressElement.cpp

    r77112 r77211  
    3131#include "HTMLParserIdioms.h"
    3232#include "RenderProgress.h"
     33#include "ShadowElement.h"
    3334#include <wtf/StdLibExtras.h>
    3435
     
    3637
    3738using namespace HTMLNames;
     39
     40class ProgressBarValueElement : public ShadowBlockElement {
     41public:
     42    ProgressBarValueElement(HTMLElement* shadowParent)
     43        : ShadowBlockElement(shadowParent)
     44    {
     45    }
     46
     47    virtual const AtomicString& shadowPseudoId() const
     48    {
     49        DEFINE_STATIC_LOCAL(AtomicString, pseudId, ("-webkit-progress-bar-value"));
     50        return pseudId;
     51    }
     52
     53    virtual void detach()
     54    {
     55        // Instead of using setShadowHost() like ShadowBlockElement does,
     56        // this class uses setShadowRoot() to unlink mutual shadow-host references.
     57        // Note that ShadowBlockElement::detach() should be removed when the
     58        // shadow model transition is over. (Bug 53417)
     59        if (Element* host = shadowHost())
     60            host->setShadowRoot(0);
     61        ShadowBlockElement::setShadowHost(0);
     62    }
     63
     64    static PassRefPtr<ProgressBarValueElement> create(HTMLElement* shadowParent)
     65    {
     66        return adoptRef(new ProgressBarValueElement(shadowParent));
     67    }
     68
     69};
    3870
    3971HTMLProgressElement::HTMLProgressElement(const QualifiedName& tagName, Document* document, HTMLFormElement* form)
     
    6193void HTMLProgressElement::parseMappedAttribute(Attribute* attribute)
    6294{
    63     if (attribute->name() == valueAttr) {
    64         if (renderer())
    65             renderer()->updateFromElement();
    66     } else if (attribute->name() == maxAttr) {
    67         if (renderer())
    68             renderer()->updateFromElement();
    69     } else
     95    if (attribute->name() == valueAttr)
     96        didElementStateChange();
     97    else if (attribute->name() == maxAttr)
     98        didElementStateChange();
     99    else
    70100        HTMLFormControlElement::parseMappedAttribute(attribute);
    71101}
     
    73103void HTMLProgressElement::attach()
    74104{
     105    createShadowSubtreeIfNeeded();
    75106    HTMLFormControlElement::attach();
    76     if (renderer())
    77         renderer()->updateFromElement();
     107    didElementStateChange();
    78108}
    79109
     
    122152}
    123153
     154ShadowBlockElement* HTMLProgressElement::valuePart()
     155{
     156    return static_cast<ShadowBlockElement*>(shadowRoot());
     157}
     158
     159void HTMLProgressElement::didElementStateChange()
     160{
     161    if (renderer())
     162        renderer()->updateFromElement();
     163}
     164
     165void HTMLProgressElement::createShadowSubtreeIfNeeded()
     166{
     167    if (shadowRoot())
     168        return;
     169    setShadowRoot(ProgressBarValueElement::create(this).get());
     170}
     171
    124172} // namespace
    125173#endif
  • trunk/Source/WebCore/html/HTMLProgressElement.h

    r77112 r77211  
    2727namespace WebCore {
    2828
     29class ShadowBlockElement;
     30
    2931class HTMLProgressElement : public HTMLFormControlElement {
    3032public:
     
    3941    double position() const;
    4042
     43    ShadowBlockElement* valuePart();
    4144private:
    4245    HTMLProgressElement(const QualifiedName&, Document*, HTMLFormElement*);
     
    5154
    5255    virtual void attach();
     56
     57    void didElementStateChange();
     58    void createShadowSubtreeIfNeeded();
    5359};
    5460
  • trunk/Source/WebCore/rendering/RenderProgress.cpp

    r77112 r77211  
    5050RenderProgress::~RenderProgress()
    5151{
    52     if (m_valuePart)
    53         m_valuePart->detach();
    5452}
    5553
    5654void RenderProgress::updateFromElement()
    5755{
    58     if (!m_valuePart) {
    59         m_valuePart = ShadowBlockElement::createForPart(static_cast<HTMLElement*>(node()), PROGRESS_BAR_VALUE);
    60         if (m_valuePart->renderer())
    61             addChild(m_valuePart->renderer());
    62     }
    63 
    6456    if (shouldHaveParts())
    6557        style()->setAppearance(NoControlPart);
    66     else if (m_valuePart->renderer())
    67         m_valuePart->renderer()->style()->setVisibility(HIDDEN);
     58    else if (valuePart()->renderer())
     59        valuePart()->renderer()->style()->setVisibility(HIDDEN);
    6860
    6961    HTMLProgressElement* element = progressElement();
     
    10395void RenderProgress::layoutParts()
    10496{
    105     m_valuePart->layoutAsPart(valuePartRect());
     97    valuePart()->layoutAsPart(valuePartRect());
    10698    updateAnimationState();
    10799}
     
    111103    if (!style()->hasAppearance())
    112104        return true;
    113     if (ShadowBlockElement::partShouldHaveStyle(this, PROGRESS_BAR_VALUE))
     105    if (!(valuePart()->renderer() && valuePart()->renderer()->style()->hasAppearance()))
    114106        return true;
    115107    return false;
     
    146138}   
    147139
     140ShadowBlockElement* RenderProgress::valuePart() const
     141{
     142    return progressElement()->valuePart();
     143}
     144
    148145} // namespace WebCore
    149146
  • trunk/Source/WebCore/rendering/RenderProgress.h

    r77112 r77211  
    5858    void updateAnimationState();
    5959
     60    ShadowBlockElement* valuePart() const;
     61
    6062    double m_position;
    6163    double m_animationStartTime;
     
    6466    bool m_animating;
    6567    Timer<RenderProgress> m_animationTimer;
    66     RefPtr<ShadowBlockElement> m_valuePart;
    6768};
    6869
  • trunk/Source/WebCore/rendering/style/RenderStyleConstants.h

    r77112 r77211  
    7272    MEDIA_CONTROLS_TIMELINE_CONTAINER, MEDIA_CONTROLS_VOLUME_SLIDER_CONTAINER, MEDIA_CONTROLS_CURRENT_TIME_DISPLAY, MEDIA_CONTROLS_TIME_REMAINING_DISPLAY,
    7373    MEDIA_CONTROLS_STATUS_DISPLAY, SCROLLBAR_THUMB, SCROLLBAR_BUTTON, SCROLLBAR_TRACK, SCROLLBAR_TRACK_PIECE, SCROLLBAR_CORNER, RESIZER,
    74     INPUT_LIST_BUTTON, INPUT_SPEECH_BUTTON, INNER_SPIN_BUTTON, OUTER_SPIN_BUTTON, VISITED_LINK, PROGRESS_BAR_VALUE,
     74    INPUT_LIST_BUTTON, INPUT_SPEECH_BUTTON, INNER_SPIN_BUTTON, OUTER_SPIN_BUTTON, VISITED_LINK,
    7575    METER_HORIZONTAL_BAR, METER_HORIZONTAL_OPTIMUM, METER_HORIZONTAL_SUBOPTIMAL, METER_HORIZONTAL_EVEN_LESS_GOOD,
    7676    METER_VERTICAL_BAR, METER_VERTICAL_OPTIMUM, METER_VERTICAL_SUBOPTIMAL, METER_VERTICAL_EVEN_LESS_GOOD,
Note: See TracChangeset for help on using the changeset viewer.