Skip to content
  • shinyak@chromium.org's avatar
    AuthorShadowDOM for progress element · c44aafaf
    shinyak@chromium.org authored
    https://bugs.webkit.org/show_bug.cgi?id=91969
    
    Reviewed by Hajime Morita.
    
    Source/WebCore:
    
    We add support for AuthorShadowDOM for progress element.
    
    According to the Shadow DOM spec, a progress element should behave like having a UserAgentShadowRoot and
    an element in UserAgentShadowRoot draws a real 'progress' bar. In this patch, we change the inner structure
    of a progress element so that we can distribute an element having RenderProgress to AuthorShadowDOM.
    
    Before this patch, a progress element has the following inner structure.
    
        <progress>--UserAgentShadowRoot -- -- -- -- -- -- -- -- -- -- AuthorShadowRoot
                           |
                           +-- ProgressBarElement
                           |
                           +-- ProgressValueElement
    
    After this patch, a progress element will have the following inner structure.
    
        <progress>--UserAgentShadowRoot -- -- -- -- -- -- -- -- -- -- AuthorShadowRoot
                           |
                           +-- ProgressInnerElement
                                       |
                                       +-- ProgressBarElement
                                       |
                                       +-- ProgressValueElement
    
    Tests: fast/dom/shadow/shadowdom-for-progress-dynamic.html
           fast/dom/shadow/shadowdom-for-progress-multiple.html
           fast/dom/shadow/shadowdom-for-progress-with-style.html
           fast/dom/shadow/shadowdom-for-progress-without-appearance.html
           fast/dom/shadow/shadowdom-for-progress-without-shadow-element.html
           fast/dom/shadow/shadowdom-for-progress.html
    
    * css/html.css:
    (progress::-webkit-progress-inner-element):
    * html/HTMLProgressElement.cpp:
    (WebCore::HTMLProgressElement::HTMLProgressElement):
    (WebCore::HTMLProgressElement::createRenderer):
    (WebCore::HTMLProgressElement::renderProgress): Returns RenderProgress gotten from UserAgentShadowDOM.
    (WebCore):
    (WebCore::HTMLProgressElement::willAddAuthorShadowRoot):
    (WebCore::HTMLProgressElement::didElementStateChange):
    (WebCore::HTMLProgressElement::createShadowSubtree): Creates a new Shadow DOM structure.
    * html/HTMLProgressElement.h:
    (WebCore):
    (WebCore::HTMLProgressElement::hasAuthorShadowRoot):
    (HTMLProgressElement):
    (WebCore::isHTMLProgressElement):
    (WebCore::toHTMLProgressElement):
    * html/shadow/ProgressShadowElement.cpp:
    (WebCore::ProgressShadowElement::ProgressShadowElement):
    (WebCore::ProgressShadowElement::progressElement):
    (WebCore::ProgressInnerElement::ProgressInnerElement): We introduce a new element having RenderProgress
    so that we can distribute an element having RenderProgress to AuthorShadowDOM.
    (WebCore):
    (WebCore::ProgressInnerElement::create):
    (WebCore::ProgressInnerElement::shadowPseudoId):
    (WebCore::ProgressInnerElement::createRenderer):
    (WebCore::ProgressInnerElement::rendererIsNeeded):
    * html/shadow/ProgressShadowElement.h:
    (ProgressShadowElement):
    (WebCore):
    (ProgressInnerElement):
    * rendering/RenderProgress.cpp:
    (WebCore::RenderProgress::RenderProgress):
    (WebCore::RenderProgress::progressElement):
    * rendering/RenderProgress.h:
    (RenderProgress):
    
    LayoutTests:
    
    Contains the following tests:
      (1) progress element with AuthorShadowDOM
      (2) progress element with multiple AuthorShadowDOM with a shadow element
      (3) progress element with multiple AuthorShadowDOM without a shadow element
      (4) progress element with AuthorShadowDOM with dynamic value update
      (5) progress element with AuthorShadowDOM with style
      (6) progress element with AuthorShadowDOM with -webkit-appearance: none
    
    * fast/dom/HTMLProgressElement/progress-clone-expected.txt:
    * fast/dom/HTMLProgressElement/progress-clone.html:
    * fast/dom/HTMLProgressElement/progress-element-markup-expected.txt:
    * fast/dom/shadow/resources/replaced-element-styles.css: Added.
    (.progress-like):
    (.progress-inner-element-like):
    * fast/dom/shadow/shadowdom-for-progress-dynamic-expected.html: Added.
    * fast/dom/shadow/shadowdom-for-progress-dynamic.html: Added.
    * fast/dom/shadow/shadowdom-for-progress-expected.html: Added.
    * fast/dom/shadow/shadowdom-for-progress-multiple-expected.html: Added.
    * fast/dom/shadow/shadowdom-for-progress-multiple.html: Added.
    * fast/dom/shadow/shadowdom-for-progress-with-style-expected.html: Added.
    * fast/dom/shadow/shadowdom-for-progress-with-style.html: Added.
    * fast/dom/shadow/shadowdom-for-progress-without-appearance-expected.html: Added.
    * fast/dom/shadow/shadowdom-for-progress-without-appearance.html: Added.
    * fast/dom/shadow/shadowdom-for-progress-without-shadow-element-expected.html: Added.
    * fast/dom/shadow/shadowdom-for-progress-without-shadow-element.html: Added.
    * fast/dom/shadow/shadowdom-for-progress.html: Added.
    * platform/chromium-win/fast/dom/HTMLProgressElement/indeterminate-progress-001-expected.txt:
    * platform/chromium-win/fast/dom/HTMLProgressElement/progress-bar-value-pseudo-element-expected.txt:
    * platform/chromium-win/fast/dom/HTMLProgressElement/progress-writing-mode-expected.txt:
    * platform/mac/TestExpectations:
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@124754 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    c44aafaf