Title: [134541] trunk
Revision
134541
Author
shin...@chromium.org
Date
2012-11-13 21:51:12 -0800 (Tue, 13 Nov 2012)

Log Message

Collect necessary features for SelectRuleFeatureSet
https://bugs.webkit.org/show_bug.cgi?id=102160

Reviewed by Dimitri Glazkov.

Source/WebCore:

When pseudo class is changed, we might have to invalidate distribution. To determine whether we should invalidate
distribution, we would like to collect RuleFeature from select attributes.

According to ShadowDOM spec, we have to collect the following pseudo classes: checked, enabled, disabled,
indeterminate, link, target, and visited. We collect them in this patch.

Test: fast/dom/shadow/shadow-select-attribute-featureset.html

* html/shadow/SelectRuleFeatureSet.cpp:
(WebCore::SelectRuleFeatureSet::SelectRuleFeatureSet): Uses int as bitset so that we can use bit operator.
(WebCore::SelectRuleFeatureSet::add):
(WebCore::SelectRuleFeatureSet::clear):
(WebCore::SelectRuleFeatureSet::collectFeaturesFromSelector): Collects necessary features from CSSSelector.
* html/shadow/SelectRuleFeatureSet.h:
(WebCore::SelectRuleFeatureSet::hasSelectorForChecked):
(WebCore::SelectRuleFeatureSet::hasSelectorForEnabled):
(WebCore::SelectRuleFeatureSet::hasSelectorForDisabled):
(WebCore::SelectRuleFeatureSet::hasSelectorForIndeterminate):
(WebCore::SelectRuleFeatureSet::hasSelectorForLink):
(WebCore::SelectRuleFeatureSet::hasSelectorForTarget):
(WebCore::SelectRuleFeatureSet::hasSelectorForVisited):
(SelectRuleFeatureSet):
(WebCore::SelectRuleFeatureSet::setSelectRuleFeature):
(WebCore::SelectRuleFeatureSet::hasSelectorFor):
* testing/Internals.cpp:
(WebCore::Internals::hasSelectorForPseudoClassInShadow):
(WebCore):
* testing/Internals.h:
(Internals):
* testing/Internals.idl:

LayoutTests:

* fast/dom/shadow/shadow-select-attribute-featureset-expected.txt:
* fast/dom/shadow/shadow-select-attribute-featureset.html:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (134540 => 134541)


--- trunk/LayoutTests/ChangeLog	2012-11-14 05:45:43 UTC (rev 134540)
+++ trunk/LayoutTests/ChangeLog	2012-11-14 05:51:12 UTC (rev 134541)
@@ -1,3 +1,13 @@
+2012-11-13  Shinya Kawanaka  <shin...@chromium.org>
+
+        Collect necessary features for SelectRuleFeatureSet
+        https://bugs.webkit.org/show_bug.cgi?id=102160
+
+        Reviewed by Dimitri Glazkov.
+
+        * fast/dom/shadow/shadow-select-attribute-featureset-expected.txt:
+        * fast/dom/shadow/shadow-select-attribute-featureset.html:
+
 2012-11-13  Kentaro Hara  <hara...@chromium.org>
 
         Unreviewed. Rebaselined test results.

Modified: trunk/LayoutTests/fast/dom/shadow/shadow-select-attribute-featureset-expected.txt (134540 => 134541)


--- trunk/LayoutTests/fast/dom/shadow/shadow-select-attribute-featureset-expected.txt	2012-11-14 05:45:43 UTC (rev 134540)
+++ trunk/LayoutTests/fast/dom/shadow/shadow-select-attribute-featureset-expected.txt	2012-11-14 05:51:12 UTC (rev 134541)
@@ -69,6 +69,69 @@
 PASS internals.hasSelectorForIdInShadow(host, "bar") is false
 PASS internals.hasSelectorForIdInShadow(host, "baz") is true
 
+PseudoClass case: :checked
+PASS internals.hasSelectorForPseudoClassInShadow(host, "checked") is true
+PASS internals.hasSelectorForPseudoClassInShadow(host, "enabled") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "disabled") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "indeterminate") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "link") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "target") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "visited") is false
+
+PseudoClass case: :enabled
+PASS internals.hasSelectorForPseudoClassInShadow(host, "checked") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "enabled") is true
+PASS internals.hasSelectorForPseudoClassInShadow(host, "disabled") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "indeterminate") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "link") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "target") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "visited") is false
+
+PseudoClass case: :disabled
+PASS internals.hasSelectorForPseudoClassInShadow(host, "checked") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "enabled") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "disabled") is true
+PASS internals.hasSelectorForPseudoClassInShadow(host, "indeterminate") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "link") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "target") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "visited") is false
+
+PseudoClass case: :indeterminate
+PASS internals.hasSelectorForPseudoClassInShadow(host, "checked") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "enabled") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "disabled") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "indeterminate") is true
+PASS internals.hasSelectorForPseudoClassInShadow(host, "link") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "target") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "visited") is false
+
+PseudoClass case: :link
+PASS internals.hasSelectorForPseudoClassInShadow(host, "checked") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "enabled") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "disabled") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "indeterminate") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "link") is true
+PASS internals.hasSelectorForPseudoClassInShadow(host, "target") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "visited") is false
+
+PseudoClass case: :target
+PASS internals.hasSelectorForPseudoClassInShadow(host, "checked") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "enabled") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "disabled") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "indeterminate") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "link") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "target") is true
+PASS internals.hasSelectorForPseudoClassInShadow(host, "visited") is false
+
+PseudoClass case: :visited
+PASS internals.hasSelectorForPseudoClassInShadow(host, "checked") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "enabled") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "disabled") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "indeterminate") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "link") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "target") is false
+PASS internals.hasSelectorForPseudoClassInShadow(host, "visited") is true
+
 PASS successfullyParsed is true
 
 TEST COMPLETE

Modified: trunk/LayoutTests/fast/dom/shadow/shadow-select-attribute-featureset.html (134540 => 134541)


--- trunk/LayoutTests/fast/dom/shadow/shadow-select-attribute-featureset.html	2012-11-14 05:45:43 UTC (rev 134540)
+++ trunk/LayoutTests/fast/dom/shadow/shadow-select-attribute-featureset.html	2012-11-14 05:51:12 UTC (rev 134541)
@@ -168,6 +168,104 @@
     shouldBe('internals.hasSelectorForIdInShadow(host, "baz")', 'true');
 });
 
+testCase(function()
+{
+    debug('PseudoClass case: :checked');
+    shadowRoot.innerHTML = '<content select="input:checked"></content>';
+
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "checked")', 'true');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "enabled")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "disabled")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "indeterminate")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "link")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "target")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "visited")', 'false');
+});
+
+testCase(function()
+{
+    debug('PseudoClass case: :enabled');
+    shadowRoot.innerHTML = '<content select="input:enabled"></content>';
+
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "checked")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "enabled")', 'true');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "disabled")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "indeterminate")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "link")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "target")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "visited")', 'false');
+});
+
+testCase(function()
+{
+    debug('PseudoClass case: :disabled');
+    shadowRoot.innerHTML = '<content select="input:disabled"></content>';
+
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "checked")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "enabled")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "disabled")', 'true');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "indeterminate")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "link")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "target")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "visited")', 'false');
+});
+
+testCase(function()
+{
+    debug('PseudoClass case: :indeterminate');
+    shadowRoot.innerHTML = '<content select="input:indeterminate"></content>';
+
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "checked")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "enabled")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "disabled")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "indeterminate")', 'true');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "link")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "target")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "visited")', 'false');
+});
+
+testCase(function()
+{
+    debug('PseudoClass case: :link');
+    shadowRoot.innerHTML = '<content select="input:link"></content>';
+
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "checked")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "enabled")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "disabled")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "indeterminate")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "link")', 'true');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "target")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "visited")', 'false');
+});
+
+testCase(function()
+{
+    debug('PseudoClass case: :target');
+    shadowRoot.innerHTML = '<content select="input:target"></content>';
+
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "checked")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "enabled")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "disabled")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "indeterminate")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "link")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "target")', 'true');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "visited")', 'false');
+});
+
+testCase(function()
+{
+    debug('PseudoClass case: :visited');
+    shadowRoot.innerHTML = '<content select="input:visited"></content>';
+
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "checked")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "enabled")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "disabled")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "indeterminate")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "link")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "target")', 'false');
+    shouldBe('internals.hasSelectorForPseudoClassInShadow(host, "visited")', 'true');
+});
+
 finishJSTest();
 </script>
 <script src=""

Modified: trunk/Source/WebCore/ChangeLog (134540 => 134541)


--- trunk/Source/WebCore/ChangeLog	2012-11-14 05:45:43 UTC (rev 134540)
+++ trunk/Source/WebCore/ChangeLog	2012-11-14 05:51:12 UTC (rev 134541)
@@ -1,3 +1,41 @@
+2012-11-13  Shinya Kawanaka  <shin...@chromium.org>
+
+        Collect necessary features for SelectRuleFeatureSet
+        https://bugs.webkit.org/show_bug.cgi?id=102160
+
+        Reviewed by Dimitri Glazkov.
+
+        When pseudo class is changed, we might have to invalidate distribution. To determine whether we should invalidate
+        distribution, we would like to collect RuleFeature from select attributes.
+
+        According to ShadowDOM spec, we have to collect the following pseudo classes: checked, enabled, disabled,
+        indeterminate, link, target, and visited. We collect them in this patch.
+
+        Test: fast/dom/shadow/shadow-select-attribute-featureset.html
+
+        * html/shadow/SelectRuleFeatureSet.cpp:
+        (WebCore::SelectRuleFeatureSet::SelectRuleFeatureSet): Uses int as bitset so that we can use bit operator.
+        (WebCore::SelectRuleFeatureSet::add):
+        (WebCore::SelectRuleFeatureSet::clear):
+        (WebCore::SelectRuleFeatureSet::collectFeaturesFromSelector): Collects necessary features from CSSSelector.
+        * html/shadow/SelectRuleFeatureSet.h:
+        (WebCore::SelectRuleFeatureSet::hasSelectorForChecked):
+        (WebCore::SelectRuleFeatureSet::hasSelectorForEnabled):
+        (WebCore::SelectRuleFeatureSet::hasSelectorForDisabled):
+        (WebCore::SelectRuleFeatureSet::hasSelectorForIndeterminate):
+        (WebCore::SelectRuleFeatureSet::hasSelectorForLink):
+        (WebCore::SelectRuleFeatureSet::hasSelectorForTarget):
+        (WebCore::SelectRuleFeatureSet::hasSelectorForVisited):
+        (SelectRuleFeatureSet):
+        (WebCore::SelectRuleFeatureSet::setSelectRuleFeature):
+        (WebCore::SelectRuleFeatureSet::hasSelectorFor):
+        * testing/Internals.cpp:
+        (WebCore::Internals::hasSelectorForPseudoClassInShadow):
+        (WebCore):
+        * testing/Internals.h:
+        (Internals):
+        * testing/Internals.idl:
+
 2012-11-13  Andreas Kling  <kl...@webkit.org>
 
         Move inline style logic from ElementAttributeData to StyledElement.

Modified: trunk/Source/WebCore/html/shadow/SelectRuleFeatureSet.cpp (134540 => 134541)


--- trunk/Source/WebCore/html/shadow/SelectRuleFeatureSet.cpp	2012-11-14 05:45:43 UTC (rev 134540)
+++ trunk/Source/WebCore/html/shadow/SelectRuleFeatureSet.cpp	2012-11-14 05:51:12 UTC (rev 134541)
@@ -36,22 +36,51 @@
 namespace WebCore {
 
 SelectRuleFeatureSet::SelectRuleFeatureSet()
+    : m_featureFlags(0)
 {
 }
 
 void SelectRuleFeatureSet::add(const SelectRuleFeatureSet& featureSet)
 {
     m_cssRuleFeatureSet.add(featureSet.m_cssRuleFeatureSet);
+    m_featureFlags |= featureSet.m_featureFlags;
 }
 
 void SelectRuleFeatureSet::clear()
 {
     m_cssRuleFeatureSet.clear();
+    m_featureFlags = 0;
 }
 
 void SelectRuleFeatureSet::collectFeaturesFromSelector(const CSSSelector* selector)
 {
     m_cssRuleFeatureSet.collectFeaturesFromSelector(selector);
+
+    switch (selector->pseudoType()) {
+    case CSSSelector::PseudoChecked:
+        setSelectRuleFeature(RuleFeatureChecked);
+        break;
+    case CSSSelector::PseudoEnabled:
+        setSelectRuleFeature(RuleFeatureEnabled);
+        break;
+    case CSSSelector::PseudoDisabled:
+        setSelectRuleFeature(RuleFeatureDisabled);
+        break;
+    case CSSSelector::PseudoIndeterminate:
+        setSelectRuleFeature(RuleFeatureIndeterminate);
+        break;
+    case CSSSelector::PseudoLink:
+        setSelectRuleFeature(RuleFeatureLink);
+        break;
+    case CSSSelector::PseudoTarget:
+        setSelectRuleFeature(RuleFeatureTarget);
+        break;
+    case CSSSelector::PseudoVisited:
+        setSelectRuleFeature(RuleFeatureVisited);
+        break;
+    default:
+        break;
+    }
 }
 
 }

Modified: trunk/Source/WebCore/html/shadow/SelectRuleFeatureSet.h (134540 => 134541)


--- trunk/Source/WebCore/html/shadow/SelectRuleFeatureSet.h	2012-11-14 05:45:43 UTC (rev 134540)
+++ trunk/Source/WebCore/html/shadow/SelectRuleFeatureSet.h	2012-11-14 05:51:12 UTC (rev 134541)
@@ -47,8 +47,30 @@
     bool hasSelectorForClass(const AtomicString&) const;
     bool hasSelectorForAttribute(const AtomicString&) const;
 
+    bool hasSelectorForChecked() const { return hasSelectorFor(RuleFeatureChecked); }
+    bool hasSelectorForEnabled() const { return hasSelectorFor(RuleFeatureEnabled); }
+    bool hasSelectorForDisabled() const { return hasSelectorFor(RuleFeatureDisabled); }
+    bool hasSelectorForIndeterminate() const { return hasSelectorFor(RuleFeatureIndeterminate); }
+    bool hasSelectorForLink() const { return hasSelectorFor(RuleFeatureLink); }
+    bool hasSelectorForTarget() const { return hasSelectorFor(RuleFeatureTarget); }
+    bool hasSelectorForVisited() const { return hasSelectorFor(RuleFeatureVisited); }
+
+    enum SelectRuleFeature {
+        RuleFeatureChecked = 1,
+        RuleFeatureEnabled = 1 << 1,
+        RuleFeatureDisabled = 1 << 2,
+        RuleFeatureIndeterminate = 1 << 3,
+        RuleFeatureLink = 1 << 4,
+        RuleFeatureTarget = 1 << 5,
+        RuleFeatureVisited = 1 << 6
+    };
+
 private:
+    void setSelectRuleFeature(SelectRuleFeature feature) { m_featureFlags |= feature; }
+    bool hasSelectorFor(SelectRuleFeature feature) const { return m_featureFlags & feature; }
+
     RuleFeatureSet m_cssRuleFeatureSet;
+    int m_featureFlags;
 };
 
 inline bool SelectRuleFeatureSet::hasSelectorForId(const AtomicString& idValue) const

Modified: trunk/Source/WebCore/testing/Internals.cpp (134540 => 134541)


--- trunk/Source/WebCore/testing/Internals.cpp	2012-11-14 05:45:43 UTC (rev 134540)
+++ trunk/Source/WebCore/testing/Internals.cpp	2012-11-14 05:51:12 UTC (rev 134541)
@@ -340,6 +340,34 @@
     return host->shadow()->selectRuleFeatureSet().hasSelectorForAttribute(attributeName);
 }
 
+bool Internals::hasSelectorForPseudoClassInShadow(Element* host, const String& pseudoClass, ExceptionCode& ec)
+{
+    if (!host || !host->shadow()) {
+        ec = INVALID_ACCESS_ERR;
+        return 0;
+    }
+
+    host->shadow()->ensureSelectFeatureSetCollected();
+    const SelectRuleFeatureSet& featureSet = host->shadow()->selectRuleFeatureSet();
+    if (pseudoClass == "checked")
+        return featureSet.hasSelectorForChecked();
+    if (pseudoClass == "enabled")
+        return featureSet.hasSelectorForEnabled();
+    if (pseudoClass == "disabled")
+        return featureSet.hasSelectorForDisabled();
+    if (pseudoClass == "indeterminate")
+        return featureSet.hasSelectorForIndeterminate();
+    if (pseudoClass == "link")
+        return featureSet.hasSelectorForLink();
+    if (pseudoClass == "target")
+        return featureSet.hasSelectorForTarget();
+    if (pseudoClass == "visited")
+        return featureSet.hasSelectorForVisited();
+
+    ASSERT_NOT_REACHED();
+    return false;
+}
+
 bool Internals::hasShadowInsertionPoint(const Node* root, ExceptionCode& ec) const
 {
     if (root && root->isShadowRoot())

Modified: trunk/Source/WebCore/testing/Internals.h (134540 => 134541)


--- trunk/Source/WebCore/testing/Internals.h	2012-11-14 05:45:43 UTC (rev 134540)
+++ trunk/Source/WebCore/testing/Internals.h	2012-11-14 05:51:12 UTC (rev 134541)
@@ -99,6 +99,7 @@
     bool hasSelectorForIdInShadow(Element* host, const String& idValue, ExceptionCode&);
     bool hasSelectorForClassInShadow(Element* host, const String& className, ExceptionCode&);
     bool hasSelectorForAttributeInShadow(Element* host, const String& attributeName, ExceptionCode&);
+    bool hasSelectorForPseudoClassInShadow(Element* host, const String& pseudoClass, ExceptionCode&);
 
     bool attached(Node*, ExceptionCode&);
 

Modified: trunk/Source/WebCore/testing/Internals.idl (134540 => 134541)


--- trunk/Source/WebCore/testing/Internals.idl	2012-11-14 05:45:43 UTC (rev 134540)
+++ trunk/Source/WebCore/testing/Internals.idl	2012-11-14 05:51:12 UTC (rev 134541)
@@ -62,6 +62,7 @@
     boolean hasSelectorForIdInShadow(in Element host, in DOMString id) raises (DOMException);
     boolean hasSelectorForClassInShadow(in Element host, in DOMString className) raises (DOMException);
     boolean hasSelectorForAttributeInShadow(in Element host, in DOMString attributeName) raises (DOMException);
+    boolean hasSelectorForPseudoClassInShadow(in Element host, in DOMString pseudoClass) raises (DOMException);
 
     Node nextSiblingByWalker(in Node node) raises(DOMException);
     Node firstChildByWalker(in Node node) raises(DOMException);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to