Changeset 107706 in webkit


Ignore:
Timestamp:
Feb 14, 2012 4:48:24 AM (12 years ago)
Author:
commit-queue@webkit.org
Message:

Use youngestShadowRoot and oldestShadowRoot instead of Element::shadowRoot().
https://bugs.webkit.org/show_bug.cgi?id=78455

Patch by Shinya Kawanaka <shinyak@google.com> on 2012-02-14
Reviewed by Hajime Morita.

.:

Exports necessary symbols.

  • Source/autotools/symbols.filter:

Source/WebCore:

Element::shadowRoot() was used for these 3 purposes.

  1. checks a shadow root exists.
  2. gets author shadow root.
  3. gets user agent shadow root.

We have to distinguish them when implementing multiple shadow subtrees.

Calling for (1), (2), and (3) are convered to hasShadowRoot(),
ShadowRootList()->youngestShadowRoot(), and ShadowRootList()->oldestShadowRoot() respectively.

No new tests, no change in behavior.

  • WebCore.exp.in:
  • dom/Document.cpp:

(WebCore::Document::buildAccessKeyMap):

  • dom/Element.cpp:

(WebCore::Element::insertedIntoDocument):
(WebCore::Element::removedFromDocument):
(WebCore::Element::insertedIntoTree):
(WebCore::Element::removedFromTree):
(WebCore::Element::attach):
(WebCore::Element::detach):
(WebCore::Element::recalcStyle):
(WebCore::Element::ensureShadowRoot):
(WebCore::Element::childrenChanged):
(WebCore::Element::focus):

  • dom/Element.h:

(Element):

  • dom/EventDispatcher.cpp:

(WebCore::isShadowHost):

  • dom/Node.cpp:

(WebCore::shadowRoot):

  • dom/NodeRenderingContext.cpp:

(WebCore::NodeRenderingContext::NodeRenderingContext):

  • dom/ShadowRoot.cpp:

(WebCore::ShadowRoot::create):

  • dom/ShadowRootList.cpp:

(WebCore::ShadowRootList::insertedIntoDocument):
(WebCore):
(WebCore::ShadowRootList::removedFromDocument):
(WebCore::ShadowRootList::insertedIntoTree):
(WebCore::ShadowRootList::removedFromTree):
(WebCore::ShadowRootList::hostChildrenChanged):
(WebCore::ShadowRootList::attach):
(WebCore::ShadowRootList::detach):

  • dom/ShadowRootList.h:

(ShadowRootList):

  • dom/TreeScopeAdopter.cpp:

(WebCore::shadowRootFor):

  • html/FileInputType.cpp:

(WebCore::FileInputType::createShadowSubtree):
(WebCore::FileInputType::multipleAttributeChanged):

  • html/HTMLDetailsElement.cpp:

(WebCore::HTMLDetailsElement::createShadowSubtree):
(WebCore::HTMLDetailsElement::findMainSummary):

  • html/HTMLInputElement.cpp:

(WebCore::HTMLInputElement::createShadowSubtree):

  • html/HTMLKeygenElement.cpp:

(WebCore::HTMLKeygenElement::HTMLKeygenElement):
(WebCore::HTMLKeygenElement::shadowSelect):

  • html/HTMLMediaElement.cpp:

(WebCore::HTMLMediaElement::mediaControls):
(WebCore::HTMLMediaElement::hasMediaControls):

  • html/HTMLMeterElement.cpp:

(WebCore::HTMLMeterElement::createShadowSubtree):

  • html/HTMLProgressElement.cpp:

(WebCore::HTMLProgressElement::createShadowSubtree):

  • html/HTMLSummaryElement.cpp:

(WebCore::HTMLSummaryElement::createShadowSubtree):

  • html/HTMLTextAreaElement.cpp:

(WebCore::HTMLTextAreaElement::createShadowSubtree):
(WebCore::HTMLTextAreaElement::innerTextElement):
(WebCore::HTMLTextAreaElement::updatePlaceholderText):

  • html/InputType.cpp:

(WebCore::InputType::destroyShadowSubtree):

  • html/RangeInputType.cpp:

(WebCore::RangeInputType::handleMouseDownEvent):
(WebCore::RangeInputType::createShadowSubtree):

  • html/TextFieldInputType.cpp:

(WebCore::TextFieldInputType::createShadowSubtree):
(WebCore::TextFieldInputType::updatePlaceholderText):

  • html/ValidationMessage.cpp:

(WebCore::ValidationMessage::deleteBubbleTree):

  • html/shadow/SliderThumbElement.cpp:

(WebCore::sliderThumbElementOf):
(WebCore::RenderSliderContainer::layout):
(WebCore::trackLimiterElementOf):

  • page/FocusController.cpp:

(WebCore::shadowRoot):

  • rendering/RenderFileUploadControl.cpp:

(WebCore::RenderFileUploadControl::uploadButton):

  • svg/SVGTRefElement.cpp:

(WebCore::SVGTRefElement::updateReferencedText):

  • testing/Internals.cpp:

(WebCore::Internals::ensureShadowRoot):
(WebCore::Internals::shadowRoot):
(WebCore):
(WebCore::Internals::youngestShadowRoot):
(WebCore::Internals::oldestShadowRoot):

  • testing/Internals.h:

(Internals):

  • testing/Internals.idl:

Source/WebKit2:

Exports necesarry symbols.

  • win/WebKit2.def:
  • win/WebKit2CFLite.def:
Location:
trunk
Files:
37 edited

Legend:

Unmodified
Added
Removed
  • trunk/ChangeLog

    r107590 r107706  
     12012-02-14  Shinya Kawanaka  <shinyak@google.com>
     2
     3        Use youngestShadowRoot and oldestShadowRoot instead of Element::shadowRoot().
     4        https://bugs.webkit.org/show_bug.cgi?id=78455
     5
     6        Reviewed by Hajime Morita.
     7
     8        Exports necessary symbols.
     9
     10        * Source/autotools/symbols.filter:
     11
    1122012-02-13  Ryosuke Niwa  <rniwa@webkit.org>
    213
  • trunk/Source/WebCore/ChangeLog

    r107705 r107706  
     12012-02-14  Shinya Kawanaka  <shinyak@google.com>
     2
     3        Use youngestShadowRoot and oldestShadowRoot instead of Element::shadowRoot().
     4        https://bugs.webkit.org/show_bug.cgi?id=78455
     5
     6        Reviewed by Hajime Morita.
     7
     8        Element::shadowRoot() was used for these 3 purposes.
     9        1. checks a shadow root exists.
     10        2. gets author shadow root.
     11        3. gets user agent shadow root.
     12
     13        We have to distinguish them when implementing multiple shadow subtrees.
     14
     15        Calling for (1), (2), and (3) are convered to hasShadowRoot(),
     16        ShadowRootList()->youngestShadowRoot(), and ShadowRootList()->oldestShadowRoot() respectively.
     17
     18        No new tests, no change in behavior.
     19
     20        * WebCore.exp.in:
     21        * dom/Document.cpp:
     22        (WebCore::Document::buildAccessKeyMap):
     23        * dom/Element.cpp:
     24        (WebCore::Element::insertedIntoDocument):
     25        (WebCore::Element::removedFromDocument):
     26        (WebCore::Element::insertedIntoTree):
     27        (WebCore::Element::removedFromTree):
     28        (WebCore::Element::attach):
     29        (WebCore::Element::detach):
     30        (WebCore::Element::recalcStyle):
     31        (WebCore::Element::ensureShadowRoot):
     32        (WebCore::Element::childrenChanged):
     33        (WebCore::Element::focus):
     34        * dom/Element.h:
     35        (Element):
     36        * dom/EventDispatcher.cpp:
     37        (WebCore::isShadowHost):
     38        * dom/Node.cpp:
     39        (WebCore::shadowRoot):
     40        * dom/NodeRenderingContext.cpp:
     41        (WebCore::NodeRenderingContext::NodeRenderingContext):
     42        * dom/ShadowRoot.cpp:
     43        (WebCore::ShadowRoot::create):
     44        * dom/ShadowRootList.cpp:
     45        (WebCore::ShadowRootList::insertedIntoDocument):
     46        (WebCore):
     47        (WebCore::ShadowRootList::removedFromDocument):
     48        (WebCore::ShadowRootList::insertedIntoTree):
     49        (WebCore::ShadowRootList::removedFromTree):
     50        (WebCore::ShadowRootList::hostChildrenChanged):
     51        (WebCore::ShadowRootList::attach):
     52        (WebCore::ShadowRootList::detach):
     53        * dom/ShadowRootList.h:
     54        (ShadowRootList):
     55        * dom/TreeScopeAdopter.cpp:
     56        (WebCore::shadowRootFor):
     57        * html/FileInputType.cpp:
     58        (WebCore::FileInputType::createShadowSubtree):
     59        (WebCore::FileInputType::multipleAttributeChanged):
     60        * html/HTMLDetailsElement.cpp:
     61        (WebCore::HTMLDetailsElement::createShadowSubtree):
     62        (WebCore::HTMLDetailsElement::findMainSummary):
     63        * html/HTMLInputElement.cpp:
     64        (WebCore::HTMLInputElement::createShadowSubtree):
     65        * html/HTMLKeygenElement.cpp:
     66        (WebCore::HTMLKeygenElement::HTMLKeygenElement):
     67        (WebCore::HTMLKeygenElement::shadowSelect):
     68        * html/HTMLMediaElement.cpp:
     69        (WebCore::HTMLMediaElement::mediaControls):
     70        (WebCore::HTMLMediaElement::hasMediaControls):
     71        * html/HTMLMeterElement.cpp:
     72        (WebCore::HTMLMeterElement::createShadowSubtree):
     73        * html/HTMLProgressElement.cpp:
     74        (WebCore::HTMLProgressElement::createShadowSubtree):
     75        * html/HTMLSummaryElement.cpp:
     76        (WebCore::HTMLSummaryElement::createShadowSubtree):
     77        * html/HTMLTextAreaElement.cpp:
     78        (WebCore::HTMLTextAreaElement::createShadowSubtree):
     79        (WebCore::HTMLTextAreaElement::innerTextElement):
     80        (WebCore::HTMLTextAreaElement::updatePlaceholderText):
     81        * html/InputType.cpp:
     82        (WebCore::InputType::destroyShadowSubtree):
     83        * html/RangeInputType.cpp:
     84        (WebCore::RangeInputType::handleMouseDownEvent):
     85        (WebCore::RangeInputType::createShadowSubtree):
     86        * html/TextFieldInputType.cpp:
     87        (WebCore::TextFieldInputType::createShadowSubtree):
     88        (WebCore::TextFieldInputType::updatePlaceholderText):
     89        * html/ValidationMessage.cpp:
     90        (WebCore::ValidationMessage::deleteBubbleTree):
     91        * html/shadow/SliderThumbElement.cpp:
     92        (WebCore::sliderThumbElementOf):
     93        (WebCore::RenderSliderContainer::layout):
     94        (WebCore::trackLimiterElementOf):
     95        * page/FocusController.cpp:
     96        (WebCore::shadowRoot):
     97        * rendering/RenderFileUploadControl.cpp:
     98        (WebCore::RenderFileUploadControl::uploadButton):
     99        * svg/SVGTRefElement.cpp:
     100        (WebCore::SVGTRefElement::updateReferencedText):
     101        * testing/Internals.cpp:
     102        (WebCore::Internals::ensureShadowRoot):
     103        (WebCore::Internals::shadowRoot):
     104        (WebCore):
     105        (WebCore::Internals::youngestShadowRoot):
     106        (WebCore::Internals::oldestShadowRoot):
     107        * testing/Internals.h:
     108        (Internals):
     109        * testing/Internals.idl:
     110
    11112012-02-14  Alexander Pavlov  <apavlov@chromium.org>
    2112
  • trunk/Source/WebCore/WebCore.exp.in

    r107682 r107706  
    14351435__ZNK7WebCore6Widget9frameRectEv
    14361436__ZNK7WebCore7Element10screenRectEv
    1437 __ZNK7WebCore7Element10shadowRootEv
    14381437__ZNK7WebCore7Element12getAttributeERKNS_13QualifiedNameE
     1438__ZNK7WebCore7Element13hasShadowRootEv
     1439__ZNK7WebCore7Element14shadowRootListEv
    14391440__ZNK7WebCore7IntRect10intersectsERKS0_
    14401441__ZNK7WebCore7IntRect8containsERKS0_
  • trunk/Source/WebCore/dom/Document.cpp

    r107700 r107706  
    138138#include "Settings.h"
    139139#include "ShadowRoot.h"
     140#include "ShadowRootList.h"
    140141#include "StaticHashSetNodeList.h"
    141142#include "StyleSheetList.h"
     
    667668        if (!accessKey.isEmpty())
    668669            m_elementsByAccessKey.set(accessKey.impl(), element);
    669         if (ShadowRoot* shadowRoot = element->shadowRoot())
    670             buildAccessKeyMap(shadowRoot);
     670
     671        if (element->hasShadowRoot()) {
     672            for (ShadowRoot* root = element->shadowRootList()->youngestShadowRoot(); root; root = root->olderShadowRoot())
     673                buildAccessKeyMap(root);
     674        }
    671675    }
    672676}
  • trunk/Source/WebCore/dom/Element.cpp

    r107663 r107706  
    874874    // by the time we reach updateId
    875875    ContainerNode::insertedIntoDocument();
    876     if (ShadowRoot* shadow = shadowRoot())
    877         shadow->insertedIntoDocument();
     876    if (ShadowRootList* shadowRoots = shadowRootList())
     877        shadowRoots->insertedIntoDocument();
    878878
    879879    if (m_attributeMap) {
     
    907907
    908908    ContainerNode::removedFromDocument();
    909     if (ShadowRoot* shadow = shadowRoot())
    910         shadow->removedFromDocument();
     909    if (ShadowRootList* shadowRoots = shadowRootList())
     910        shadowRoots->removedFromDocument();
    911911}
    912912
     
    916916    if (!deep)
    917917        return;
    918     if (ShadowRoot* shadow = shadowRoot())
    919         shadow->insertedIntoTree(true);
     918    if (ShadowRootList* shadowRoots = shadowRootList())
     919        shadowRoots->insertedIntoTree(true);
    920920
    921921#if ENABLE(FULLSCREEN_API)
     
    930930    if (!deep)
    931931        return;
    932     if (ShadowRoot* shadow = shadowRoot())
    933         shadow->removedFromTree(true);
     932    if (ShadowRootList* shadowRoots = shadowRootList())
     933        shadowRoots->removedFromTree(true);
    934934}
    935935
     
    943943
    944944    // When a shadow root exists, it does the work of attaching the children.
    945     if (ShadowRoot* shadow = shadowRoot()) {
     945    if (hasShadowRoot()) {
    946946        parentPusher.push();
    947947        Node::attach();
    948         shadow->attach();
     948        shadowRootList()->attach();
    949949
    950950        // In a shadow tree, some of light children may be attached by 'content' element.
     
    982982        rareData()->resetComputedStyle();
    983983    ContainerNode::detach();
    984     if (ShadowRoot* shadow = shadowRoot())
    985         shadow->detach();
     984    if (ShadowRootList* shadowRoots = shadowRootList())
     985        shadowRoots->detach();
    986986
    987987    RenderWidget::resumeWidgetHierarchyUpdates();
     
    11421142    }
    11431143    // FIXME: This does not care about sibling combinators. Will be necessary in XBL2 world.
    1144     if (ShadowRoot* shadow = shadowRoot()) {
     1144    if (hasShadowRoot()) {
     1145        ShadowRoot* shadow = shadowRootList()->youngestShadowRoot();
    11451146        if (change >= Inherit || shadow->childNeedsStyleRecalc() || shadow->needsStyleRecalc()) {
    11461147            parentPusher.push();
     
    11691170
    11701171    return &rareData()->m_shadowRootList;
    1171 }
    1172 
    1173 ShadowRoot* Element::shadowRoot() const
    1174 {
    1175     if (ShadowRootList* list = shadowRootList())
    1176         return list->youngestShadowRoot();
    1177     return 0;
    11781172}
    11791173
     
    12201214ShadowRoot* Element::ensureShadowRoot()
    12211215{
    1222     if (ShadowRoot* existingRoot = shadowRoot())
    1223         return existingRoot;
     1216    if (hasShadowRoot())
     1217        return shadowRootList()->oldestShadowRoot();
    12241218
    12251219    return ShadowRoot::create(this, ShadowRoot::CreatingUserAgentShadowRoot).get();
     
    13831377
    13841378    if (hasRareData()) {
    1385         if (ShadowRoot* root = shadowRoot())
    1386             root->hostChildrenChanged();
     1379        if (ShadowRootList* list = shadowRootList())
     1380            list->hostChildrenChanged();
    13871381    }
    13881382}
     
    15811575        // does not make sense to continue and update appearence.
    15821576        protect = this;
    1583         if (shadowRoot() && page->focusController()->transferFocusToElementInShadowRoot(this, restorePreviousSelection))
     1577        if (hasShadowRoot() && page->focusController()->transferFocusToElementInShadowRoot(this, restorePreviousSelection))
    15841578            return;
    15851579        if (!page->focusController()->setFocusedNode(this, doc->frame()))
  • trunk/Source/WebCore/dom/Element.h

    r107650 r107706  
    259259    // FIXME: These API will be moved to ShadowRootList.
    260260    // https://bugs.webkit.org/show_bug.cgi?id=78313
    261     ShadowRoot* shadowRoot() const;
    262261    void setShadowRoot(PassRefPtr<ShadowRoot>, ExceptionCode&);
    263262    ShadowRoot* ensureShadowRoot();
  • trunk/Source/WebCore/dom/EventDispatcher.cpp

    r105241 r107706  
    128128static inline bool isShadowHost(Node* node)
    129129{
    130     return node->isElementNode() && toElement(node)->shadowRoot();
     130    return node->isElementNode() && toElement(node)->hasShadowRoot();
    131131}
    132132
  • trunk/Source/WebCore/dom/Node.cpp

    r107700 r107706  
    8787#include "SelectorQuery.h"
    8888#include "ShadowRoot.h"
     89#include "ShadowRootList.h"
    8990#include "StaticNodeList.h"
    9091#include "StorageEvent.h"
     
    809810inline static ShadowRoot* shadowRoot(Node* node)
    810811{
    811     return node->isElementNode() ? toElement(node)->shadowRoot() : 0;
     812    return node->isElementNode() && toElement(node)->hasShadowRoot() ? toElement(node)->shadowRootList()->youngestShadowRoot() : 0;
    812813}
    813814
  • trunk/Source/WebCore/dom/NodeRenderingContext.cpp

    r107690 r107706  
    3636#include "RenderView.h"
    3737#include "ShadowRoot.h"
     38#include "ShadowRootList.h"
    3839
    3940#if ENABLE(SVG)
     
    6667
    6768    if (parent->isElementNode()) {
    68         m_visualParentShadowRoot = toElement(parent)->shadowRoot();
     69        if (toElement(parent)->hasShadowRoot())
     70            m_visualParentShadowRoot = toElement(parent)->shadowRootList()->youngestShadowRoot();
    6971
    7072        if (m_visualParentShadowRoot) {
  • trunk/Source/WebCore/dom/ShadowRoot.cpp

    r107700 r107706  
    9898PassRefPtr<ShadowRoot> ShadowRoot::create(Element* element, ShadowRootCreationPurpose purpose, ExceptionCode& ec)
    9999{
    100     if (!element || element->shadowRoot()) {
     100    if (!element || element->hasShadowRoot()) {
    101101        ec = HIERARCHY_REQUEST_ERR;
    102102        return 0;
     
    110110    }
    111111
    112     ASSERT(purpose != CreatingUserAgentShadowRoot || !element->shadowRoot());
     112    ASSERT(purpose != CreatingUserAgentShadowRoot || !element->hasShadowRoot());
    113113    RefPtr<ShadowRoot> shadowRoot = create(element->document());
    114114
  • trunk/Source/WebCore/dom/ShadowRootList.cpp

    r107525 r107706  
    6060}
    6161
     62void ShadowRootList::insertedIntoDocument()
     63{
     64    for (ShadowRoot* root = youngestShadowRoot(); root; root = root->olderShadowRoot())
     65        root->insertedIntoDocument();
    6266}
     67
     68void ShadowRootList::removedFromDocument()
     69{
     70    for (ShadowRoot* root = youngestShadowRoot(); root; root = root->olderShadowRoot())
     71        root->removedFromDocument();
     72}
     73
     74void ShadowRootList::insertedIntoTree(bool deep)
     75{
     76    for (ShadowRoot* root = youngestShadowRoot(); root; root = root->olderShadowRoot())
     77        root->insertedIntoTree(deep);
     78}
     79
     80void ShadowRootList::removedFromTree(bool deep)
     81{
     82    for (ShadowRoot* root = youngestShadowRoot(); root; root = root->olderShadowRoot())
     83        root->removedFromTree(deep);
     84}
     85
     86void ShadowRootList::hostChildrenChanged()
     87{
     88    for (ShadowRoot* root = youngestShadowRoot(); root; root = root->olderShadowRoot())
     89        root->hostChildrenChanged();
     90}
     91
     92void ShadowRootList::attach()
     93{
     94    // FIXME: Currently we only support the case that the shadow root list has at most one shadow root.
     95    // See also https://bugs.webkit.org/show_bug.cgi?id=77503 and its dependent bugs.
     96    ASSERT(m_shadowRoots.size() <= 1);
     97
     98    for (ShadowRoot* root = youngestShadowRoot(); root; root = root->olderShadowRoot()) {
     99        if (!root->attached())
     100            root->attach();
     101    }
     102}
     103
     104void ShadowRootList::detach()
     105{
     106    // FIXME: Currently we only support the case that the shadow root list has at most one shadow root.
     107    // See also https://bugs.webkit.org/show_bug.cgi?id=77503 and its dependent bugs.
     108    ASSERT(m_shadowRoots.size() <= 1);
     109
     110    for (ShadowRoot* root = youngestShadowRoot(); root; root = root->olderShadowRoot()) {
     111        if (root->attached())
     112            root->detach();
     113    }
     114}
     115
     116}
  • trunk/Source/WebCore/dom/ShadowRootList.h

    r107525 r107706  
    4949    ShadowRoot* popShadowRoot();
    5050
     51    void insertedIntoDocument();
     52    void removedFromDocument();
     53    void insertedIntoTree(bool deep);
     54    void removedFromTree(bool deep);
     55
     56    void hostChildrenChanged();
     57
     58    void attach();
     59    void detach();
     60
    5161private:
    5262    DoublyLinkedList<ShadowRoot> m_shadowRoots;
  • trunk/Source/WebCore/dom/TreeScopeAdopter.cpp

    r107519 r107706  
    2929#include "NodeRareData.h"
    3030#include "ShadowRoot.h"
     31#include "ShadowRootList.h"
    3132
    3233namespace WebCore {
     
    3435static inline ShadowRoot* shadowRootFor(Node* node)
    3536{
    36     return node->isElementNode() ? toElement(node)->shadowRoot() : 0;
     37    return node->isElementNode() && toElement(node)->hasShadowRoot() ? toElement(node)->shadowRootList()->youngestShadowRoot() : 0;
    3738}
    3839
  • trunk/Source/WebCore/html/FileInputType.cpp

    r107555 r107706  
    3737#include "ScriptController.h"
    3838#include "ShadowRoot.h"
     39#include "ShadowRootList.h"
    3940#include <wtf/PassOwnPtr.h>
    4041#include <wtf/text/StringBuilder.h>
     
    266267void FileInputType::createShadowSubtree()
    267268{
    268     ASSERT(element()->shadowRoot());
     269    ASSERT(element()->hasShadowRoot());
    269270    ExceptionCode ec = 0;
    270     element()->shadowRoot()->appendChild(element()->multiple() ? UploadButtonElement::createForMultiple(element()->document()): UploadButtonElement::create(element()->document()), ec);
     271    element()->shadowRootList()->oldestShadowRoot()->appendChild(element()->multiple() ? UploadButtonElement::createForMultiple(element()->document()): UploadButtonElement::create(element()->document()), ec);
    271272}
    272273
    273274void FileInputType::multipleAttributeChanged()
    274275{
    275     ASSERT(element()->shadowRoot());
    276     UploadButtonElement* button = static_cast<UploadButtonElement*>(element()->shadowRoot()->firstChild());
     276    ASSERT(element()->hasShadowRoot());
     277    UploadButtonElement* button = static_cast<UploadButtonElement*>(element()->shadowRootList()->oldestShadowRoot()->firstChild());
    277278    if (button)
    278279        button->setValue(element()->multiple() ? fileButtonChooseMultipleFilesLabel() : fileButtonChooseFileLabel());
  • trunk/Source/WebCore/html/HTMLDetailsElement.cpp

    r107202 r107706  
    3131#include "RenderDetails.h"
    3232#include "ShadowRoot.h"
     33#include "ShadowRootList.h"
    3334#include "Text.h"
    3435
     
    109110void HTMLDetailsElement::createShadowSubtree()
    110111{
    111     ASSERT(!shadowRoot());
     112    ASSERT(!hasShadowRoot());
    112113
    113114    RefPtr<ShadowRoot> root = ShadowRoot::create(this, ShadowRoot::CreatingUserAgentShadowRoot);
     
    123124    }
    124125
    125     return static_cast<DetailsSummaryElement*>(shadowRoot()->firstChild())->fallbackSummary();
     126    return static_cast<DetailsSummaryElement*>(shadowRootList()->oldestShadowRoot()->firstChild())->fallbackSummary();
    126127}
    127128
  • trunk/Source/WebCore/html/HTMLInputElement.cpp

    r107570 r107706  
    110110void HTMLInputElement::createShadowSubtree()
    111111{
    112     ASSERT(!shadowRoot());
     112    ASSERT(!hasShadowRoot());
    113113    ShadowRoot::create(this, ShadowRoot::CreatingUserAgentShadowRoot, ASSERT_NO_EXCEPTION);
    114114
  • trunk/Source/WebCore/html/HTMLKeygenElement.cpp

    r107202 r107706  
    3434#include "SSLKeyGenerator.h"
    3535#include "ShadowRoot.h"
     36#include "ShadowRootList.h"
    3637#include "Text.h"
    3738#include <wtf/StdLibExtras.h>
     
    8687    }
    8788
    88     ASSERT(!shadowRoot());
     89    ASSERT(!hasShadowRoot());
    8990    RefPtr<ShadowRoot> root = ShadowRoot::create(this, ShadowRoot::CreatingUserAgentShadowRoot);
    9091    root->appendChild(select, ec);
     
    131132HTMLSelectElement* HTMLKeygenElement::shadowSelect() const
    132133{
    133     ShadowRoot* shadow = shadowRoot();
    134     ASSERT(shadow);
     134    ASSERT(hasShadowRoot());
     135    ShadowRoot* shadow = shadowRootList()->oldestShadowRoot();
    135136    return shadow ? toHTMLSelectElement(shadow->firstChild()) : 0;
    136137}
  • trunk/Source/WebCore/html/HTMLMediaElement.cpp

    r107244 r107706  
    7272#include "Settings.h"
    7373#include "ShadowRoot.h"
     74#include "ShadowRootList.h"
    7475#include "TimeRanges.h"
    7576#include "UUID.h"
     
    35203521MediaControls* HTMLMediaElement::mediaControls()
    35213522{
    3522     return toMediaControls(shadowRoot()->firstChild());
     3523    return toMediaControls(shadowRootList()->oldestShadowRoot()->firstChild());
    35233524}
    35243525
    35253526bool HTMLMediaElement::hasMediaControls()
    35263527{
    3527     if (!shadowRoot())
     3528    if (!hasShadowRoot())
    35283529        return false;
    35293530
    3530     Node* node = shadowRoot()->firstChild();
     3531    Node* node = shadowRootList()->oldestShadowRoot()->firstChild();
    35313532    return node && node->isMediaControls();
    35323533}
  • trunk/Source/WebCore/html/HTMLMeterElement.cpp

    r107202 r107706  
    235235void HTMLMeterElement::createShadowSubtree()
    236236{
    237     ASSERT(!shadowRoot());
     237    ASSERT(!hasShadowRoot());
    238238
    239239    RefPtr<MeterBarElement> bar = MeterBarElement::create(document());
  • trunk/Source/WebCore/html/HTMLProgressElement.cpp

    r107202 r107706  
    154154void HTMLProgressElement::createShadowSubtree()
    155155{
    156     ASSERT(!shadowRoot());
     156    ASSERT(!hasShadowRoot());
    157157
    158158    RefPtr<ProgressBarElement> bar = ProgressBarElement::create(document());
  • trunk/Source/WebCore/html/HTMLSummaryElement.cpp

    r107548 r107706  
    3232#include "PlatformMouseEvent.h"
    3333#include "RenderSummary.h"
    34 
    3534#include "ShadowRoot.h"
     35#include "ShadowRootList.h"
    3636
    3737namespace WebCore {
     
    7575void HTMLSummaryElement::createShadowSubtree()
    7676{
    77     ASSERT(!shadowRoot());
     77    ASSERT(!hasShadowRoot());
    7878    RefPtr<ShadowRoot> root = ShadowRoot::create(this, ShadowRoot::CreatingUserAgentShadowRoot);
    7979    root->appendChild(DetailsMarkerControl::create(document()), ASSERT_NO_EXCEPTION, true);
  • trunk/Source/WebCore/html/HTMLTextAreaElement.cpp

    r107554 r107706  
    3939#include "RenderTextControlMultiLine.h"
    4040#include "ShadowRoot.h"
     41#include "ShadowRootList.h"
    4142#include "Text.h"
    4243#include "TextControlInnerElements.h"
     
    8586void HTMLTextAreaElement::createShadowSubtree()
    8687{
    87     ASSERT(!shadowRoot());
     88    ASSERT(!hasShadowRoot());
    8889    RefPtr<ShadowRoot> root = ShadowRoot::create(this, ShadowRoot::CreatingUserAgentShadowRoot);
    8990    root->appendChild(TextControlInnerTextElement::create(document()), ASSERT_NO_EXCEPTION);
     
    294295HTMLElement* HTMLTextAreaElement::innerTextElement() const
    295296{
    296     Node* node = shadowRoot()->firstChild();
     297    Node* node = shadowRootList()->oldestShadowRoot()->firstChild();
    297298    ASSERT(!node || node->hasTagName(divTag));
    298299    return toHTMLElement(node);
     
    471472    if (placeholderText.isEmpty()) {
    472473        if (m_placeholder) {
    473             shadowRoot()->removeChild(m_placeholder.get(), ec);
     474            shadowRootList()->oldestShadowRoot()->removeChild(m_placeholder.get(), ec);
    474475            ASSERT(!ec);
    475476            m_placeholder.clear();
     
    480481        m_placeholder = HTMLDivElement::create(document());
    481482        m_placeholder->setShadowPseudoId("-webkit-input-placeholder");
    482         shadowRoot()->insertBefore(m_placeholder, shadowRoot()->firstChild()->nextSibling(), ec);
     483        shadowRootList()->oldestShadowRoot()->insertBefore(m_placeholder, shadowRootList()->oldestShadowRoot()->firstChild()->nextSibling(), ec);
    483484        ASSERT(!ec);
    484485    }
  • trunk/Source/WebCore/html/InputType.cpp

    r107555 r107706  
    5757#include "SearchInputType.h"
    5858#include "ShadowRoot.h"
     59#include "ShadowRootList.h"
    5960#include "SubmitInputType.h"
    6061#include "TelephoneInputType.h"
     
    379380void InputType::destroyShadowSubtree()
    380381{
    381     if (ShadowRoot* root = element()->shadowRoot())
     382    if (!element()->hasShadowRoot())
     383        return;
     384
     385    if (ShadowRoot* root = element()->shadowRootList()->oldestShadowRoot())
    382386        root->removeAllChildren();
    383387}
  • trunk/Source/WebCore/html/RangeInputType.cpp

    r107555 r107706  
    4343#include "RenderSlider.h"
    4444#include "ShadowRoot.h"
     45#include "ShadowRootList.h"
    4546#include "SliderThumbElement.h"
    4647#include "StepRange.h"
     
    158159
    159160    Node* targetNode = event->target()->toNode();
    160     if (event->button() != LeftButton || !targetNode || (targetNode != element() && !targetNode->isDescendantOf(element()->shadowRoot())))
     161    if (event->button() != LeftButton || !targetNode)
     162        return;
     163    ASSERT(element()->hasShadowRoot());
     164    if (targetNode != element() && !targetNode->isDescendantOf(element()->shadowRootList()->oldestShadowRoot()))
    161165        return;
    162166    SliderThumbElement* thumb = sliderThumbElementOf(element());
     
    234238void RangeInputType::createShadowSubtree()
    235239{
    236     ASSERT(element()->shadowRoot());
     240    ASSERT(element()->hasShadowRoot());
    237241
    238242    Document* document = element()->document();
     
    244248    container->appendChild(track.release(), ec);
    245249    container->appendChild(TrackLimiterElement::create(document), ec);
    246     element()->shadowRoot()->appendChild(container.release(), ec);
     250    element()->shadowRootList()->oldestShadowRoot()->appendChild(container.release(), ec);
    247251}
    248252
  • trunk/Source/WebCore/html/TextFieldInputType.cpp

    r107555 r107706  
    4444#include "RenderTheme.h"
    4545#include "ShadowRoot.h"
     46#include "ShadowRootList.h"
    4647#include "TextControlInnerElements.h"
    4748#include "TextEvent.h"
     
    190191void TextFieldInputType::createShadowSubtree()
    191192{
    192     ASSERT(element()->shadowRoot());
     193    ASSERT(element()->hasShadowRoot());
    193194
    194195    ASSERT(!m_innerText);
     
    204205    m_innerText = TextControlInnerTextElement::create(document);
    205206    if (!createsContainer) {
    206         element()->shadowRoot()->appendChild(m_innerText, ec);
    207         return;
    208     }
    209 
    210     ShadowRoot* shadowRoot = element()->shadowRoot();
     207        element()->shadowRootList()->oldestShadowRoot()->appendChild(m_innerText, ec);
     208        return;
     209    }
     210
     211    ShadowRoot* shadowRoot = element()->shadowRootList()->oldestShadowRoot();
    211212    m_container = HTMLDivElement::create(document);
    212213    m_container->setShadowPseudoId("-webkit-textfield-decoration-container");
     
    370371        m_placeholder = HTMLDivElement::create(element()->document());
    371372        m_placeholder->setShadowPseudoId("-webkit-input-placeholder");
    372         element()->shadowRoot()->insertBefore(m_placeholder, m_container ? m_container->nextSibling() : innerTextElement()->nextSibling(), ec);
     373        element()->shadowRootList()->oldestShadowRoot()->insertBefore(m_placeholder, m_container ? m_container->nextSibling() : innerTextElement()->nextSibling(), ec);
    373374        ASSERT(!ec);
    374375    }
  • trunk/Source/WebCore/html/ValidationMessage.cpp

    r106681 r107706  
    4545#include "Settings.h"
    4646#include "ShadowRoot.h"
     47#include "ShadowRootList.h"
    4748#include "Text.h"
    4849#include <wtf/PassOwnPtr.h>
     
    188189        HTMLElement* host = toHTMLElement(m_element);
    189190        ExceptionCode ec;
    190         host->shadowRoot()->removeChild(m_bubble.get(), ec);
     191        host->shadowRootList()->oldestShadowRoot()->removeChild(m_bubble.get(), ec);
    191192        m_bubble = 0;
    192193    }
  • trunk/Source/WebCore/html/shadow/SliderThumbElement.cpp

    r106681 r107706  
    4444#include "RenderTheme.h"
    4545#include "ShadowRoot.h"
     46#include "ShadowRootList.h"
    4647#include "StepRange.h"
    4748#include <wtf/MathExtras.h>
     
    6768{
    6869    ASSERT(node);
    69     ShadowRoot* shadow = node->toInputElement()->shadowRoot();
     70    ShadowRoot* shadow = node->toInputElement()->shadowRootList()->oldestShadowRoot();
    7071    ASSERT(shadow);
    7172    Node* thumb = shadow->firstChild()->firstChild()->firstChild();
     
    142143    RenderObject* trackRenderer = node()->firstChild()->renderer();
    143144    if (!isVertical && input->renderer()->isSlider() && !inputHeight.isFixed() && !inputHeight.isPercent()) {
    144         RenderObject* thumbRenderer = input->shadowRoot()->firstChild()->firstChild()->firstChild()->renderer();
     145        RenderObject* thumbRenderer = input->shadowRootList()->oldestShadowRoot()->firstChild()->firstChild()->firstChild()->renderer();
    145146        if (thumbRenderer) {
    146147            style()->setHeight(thumbRenderer->style()->height());
     
    356357{
    357358    ASSERT(node);
    358     ShadowRoot* shadow = node->toInputElement()->shadowRoot();
     359    ASSERT(node->toInputElement()->hasShadowRoot());
     360    ShadowRoot* shadow = node->toInputElement()->shadowRootList()->oldestShadowRoot();
    359361    ASSERT(shadow);
    360362    Node* limiter = shadow->firstChild()->lastChild();
  • trunk/Source/WebCore/page/FocusController.cpp

    r106977 r107706  
    5555#include "Settings.h"
    5656#include "ShadowRoot.h"
     57#include "ShadowRootList.h"
    5758#include "SpatialNavigation.h"
    5859#include "Widget.h"
     
    155156static inline ShadowRoot* shadowRoot(Node* node)
    156157{
    157     return node->isElementNode() ? toElement(node)->shadowRoot() : 0;
     158    return node->isElementNode() && toElement(node)->hasShadowRoot() ? toElement(node)->shadowRootList()->youngestShadowRoot() : 0;
    158159}
    159160
  • trunk/Source/WebCore/rendering/RenderFileUploadControl.cpp

    r99369 r107706  
    3333#include "RenderTheme.h"
    3434#include "ShadowRoot.h"
     35#include "ShadowRootList.h"
    3536#include "TextRun.h"
    3637#include "VisiblePosition.h"
     
    213214    HTMLInputElement* input = static_cast<HTMLInputElement*>(node());
    214215
    215     ASSERT(input->shadowRoot());
    216 
    217     Node* buttonNode = input->shadowRoot()->firstChild();
     216    ASSERT(input->hasShadowRoot());
     217
     218    Node* buttonNode = input->shadowRootList()->oldestShadowRoot()->firstChild();
    218219    return buttonNode && buttonNode->isHTMLElement() && buttonNode->hasTagName(inputTag) ? static_cast<HTMLInputElement*>(buttonNode) : 0;
    219220}
  • trunk/Source/WebCore/svg/SVGTRefElement.cpp

    r107523 r107706  
    3232#include "RenderSVGResource.h"
    3333#include "ShadowRoot.h"
     34#include "ShadowRootList.h"
    3435#include "SVGDocument.h"
    3536#include "SVGElementInstance.h"
     
    160161        textContent = target->textContent();
    161162
    162     if (!shadowRoot()->firstChild())
    163         shadowRoot()->appendChild(SVGShadowText::create(document(), textContent), ASSERT_NO_EXCEPTION);
     163    ASSERT(hasShadowRoot());
     164    ShadowRoot* root = shadowRootList()->oldestShadowRoot();
     165    if (!root->firstChild())
     166        root->appendChild(SVGShadowText::create(document(), textContent), ASSERT_NO_EXCEPTION);
    164167    else
    165         shadowRoot()->firstChild()->setTextContent(textContent, ASSERT_NO_EXCEPTION);
     168        root->firstChild()->setTextContent(textContent, ASSERT_NO_EXCEPTION);
    166169}
    167170
  • trunk/Source/WebCore/testing/Internals.cpp

    r107665 r107706  
    5151#include "Settings.h"
    5252#include "ShadowRoot.h"
     53#include "ShadowRootList.h"
    5354#include "SpellChecker.h"
    5455#include "TextIterator.h"
     
    186187    }
    187188
    188     if (ShadowRoot* root = host->shadowRoot())
    189         return root;
     189    if (host->hasShadowRoot())
     190        return host->shadowRootList()->youngestShadowRoot();
    190191
    191192    return ShadowRoot::create(host, ec).get();
     
    194195Internals::ShadowRootIfShadowDOMEnabledOrNode* Internals::shadowRoot(Element* host, ExceptionCode& ec)
    195196{
     197    // FIXME: Internals::shadowRoot() in tests should be converted to youngestShadowRoot() or oldestShadowRoot().
     198    // https://bugs.webkit.org/show_bug.cgi?id=78465
     199    return youngestShadowRoot(host, ec);
     200}
     201
     202Internals::ShadowRootIfShadowDOMEnabledOrNode* Internals::youngestShadowRoot(Element* host, ExceptionCode& ec)
     203{
    196204    if (!host) {
    197205        ec = INVALID_ACCESS_ERR;
     
    199207    }
    200208
    201     return host->shadowRoot();
     209    if (!host->hasShadowRoot())
     210        return 0;
     211
     212    return host->shadowRootList()->youngestShadowRoot();
     213}
     214
     215Internals::ShadowRootIfShadowDOMEnabledOrNode* Internals::oldestShadowRoot(Element* host, ExceptionCode& ec)
     216{
     217    if (!host) {
     218        ec = INVALID_ACCESS_ERR;
     219        return 0;
     220    }
     221
     222    if (!host->hasShadowRoot())
     223        return 0;
     224
     225    return host->shadowRootList()->oldestShadowRoot();
    202226}
    203227
  • trunk/Source/WebCore/testing/Internals.h

    r107176 r107706  
    6767    ShadowRootIfShadowDOMEnabledOrNode* ensureShadowRoot(Element* host, ExceptionCode&);
    6868    ShadowRootIfShadowDOMEnabledOrNode* shadowRoot(Element* host, ExceptionCode&);
     69    ShadowRootIfShadowDOMEnabledOrNode* youngestShadowRoot(Element* host, ExceptionCode&);
     70    ShadowRootIfShadowDOMEnabledOrNode* oldestShadowRoot(Element* host, ExceptionCode&);
    6971    void removeShadowRoot(Element* host, ExceptionCode&);
    7072    Element* includerFor(Node*, ExceptionCode&);
  • trunk/Source/WebCore/testing/Internals.idl

    r107176 r107706  
    3636        ShadowRoot ensureShadowRoot(in Element host) raises (DOMException);
    3737        ShadowRoot shadowRoot(in Element host) raises (DOMException);
     38        ShadowRoot youngestShadowRoot(in Element host) raises (DOMException);
     39        ShadowRoot oldestShadowRoot(in Element host) raises (DOMException);
    3840#else
    3941        Node ensureShadowRoot(in Element host) raises (DOMException);
    4042        Node shadowRoot(in Element host) raises (DOMException);
     43        Node youngestShadowRoot(in Element host) raises (DOMException);
     44        Node oldestShadowRoot(in Element host) raises (DOMException);
    4145#endif
    4246        Element includerFor(in Node node) raises (DOMException);
  • trunk/Source/WebKit2/ChangeLog

    r107689 r107706  
     12012-02-14  Shinya Kawanaka  <shinyak@google.com>
     2
     3        Use youngestShadowRoot and oldestShadowRoot instead of Element::shadowRoot().
     4        https://bugs.webkit.org/show_bug.cgi?id=78455
     5
     6        Reviewed by Hajime Morita.
     7
     8        Exports necesarry symbols.
     9
     10        * win/WebKit2.def:
     11        * win/WebKit2CFLite.def:
     12
    1132012-02-14  Alexey Proskuryakov  <ap@apple.com>
    214
  • trunk/Source/WebKit2/win/WebKit2.def

    r107176 r107706  
    164164        ?getElementById@TreeScope@WebCore@@QBEPAVElement@2@ABVAtomicString@WTF@@@Z
    165165        ?getLocationAndLengthFromRange@TextIterator@WebCore@@SA_NPAVElement@2@PBVRange@2@AAI2@Z
     166        ?hasShadowRoot@Element@WebCore@@QBE_NXZ
    166167        ?isPreloaded@CachedResourceLoader@WebCore@@QBE_NABVString@WTF@@@Z
    167168        ?jsStringSlowCase@WebCore@@YA?AVJSValue@JSC@@PAVExecState@3@AAV?$HashMap@PAVStringImpl@WTF@@V?$Weak@VJSString@JSC@@@JSC@@UStringHash@2@U?$HashTraits@PAVStringImpl@WTF@@@2@U?$HashTraits@V?$Weak@VJSString@JSC@@@JSC@@@2@@WTF@@PAVStringImpl@6@@Z
     
    188189        ?settings@Frame@WebCore@@QBEPAVSettings@2@XZ
    189190        ?setFixedElementsLayoutRelativeToFrame@Settings@WebCore@@QAEX_N@Z
    190         ?shadowRoot@Element@WebCore@@QBEPAVShadowRoot@2@XZ
     191        ?shadowRootList@Element@WebCore@@QBEPAVShadowRootList@2@XZ
    191192        ?suggestedValue@HTMLInputElement@WebCore@@QBEABVString@WTF@@XZ
    192193        ?toDocument@WebCore@@YAPAVDocument@1@VJSValue@JSC@@@Z
  • trunk/Source/WebKit2/win/WebKit2CFLite.def

    r107176 r107706  
     1
    12EXPORTS
    23        DllGetClassObject   PRIVATE
     
    158159        ?getElementById@TreeScope@WebCore@@QBEPAVElement@2@ABVAtomicString@WTF@@@Z
    159160        ?getLocationAndLengthFromRange@TextIterator@WebCore@@SA_NPAVElement@2@PBVRange@2@AAI2@Z
     161        ?hasShadowRoot@Element@WebCore@@QBE_NXZ
    160162        ?isPreloaded@CachedResourceLoader@WebCore@@QBE_NABVString@WTF@@@Z
    161163        ?jsStringSlowCase@WebCore@@YA?AVJSValue@JSC@@PAVExecState@3@AAV?$HashMap@PAVStringImpl@WTF@@V?$Weak@VJSString@JSC@@@JSC@@UStringHash@2@U?$HashTraits@PAVStringImpl@WTF@@@2@U?$HashTraits@V?$Weak@VJSString@JSC@@@JSC@@@2@@WTF@@PAVStringImpl@6@@Z
     
    182184        ?settings@Frame@WebCore@@QBEPAVSettings@2@XZ
    183185        ?setFixedElementsLayoutRelativeToFrame@Settings@WebCore@@QAEX_N@Z
    184         ?shadowRoot@Element@WebCore@@QBEPAVShadowRoot@2@XZ
     186        ?shadowRootList@Element@WebCore@@QBEPAVShadowRootList@2@XZ
    185187        ?suggestedValue@HTMLInputElement@WebCore@@QBEABVString@WTF@@XZ
    186188        ?toDocument@WebCore@@YAPAVDocument@1@VJSValue@JSC@@@Z
  • trunk/Source/autotools/symbols.filter

    r107250 r107706  
    7979_ZNK7WebCore5Frame8settingsEv;
    8080_ZNK7WebCore6JSNode21pushEventHandlerScopeEPN3JSC9ExecStateEPNS1_14ScopeChainNodeE;
    81 _ZNK7WebCore7Element10shadowRootEv;
    8281_ZNK7WebCore7Element31numberOfScopedHTMLStyleChildrenEv;
     82_ZNK7WebCore7Element13hasShadowRootEv;
     83_ZNK7WebCore7Element14shadowRootListEv;
    8384_ZNK7WebCore8Document4pageEv;
    8485_ZNK7WebCore8Document8settingsEv;
Note: See TracChangeset for help on using the changeset viewer.