Add a deprecation warning for Element.webkitMatchesSelector
authorbenjamin@webkit.org <benjamin@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 6 Oct 2014 02:08:53 +0000 (02:08 +0000)
committerbenjamin@webkit.org <benjamin@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 6 Oct 2014 02:08:53 +0000 (02:08 +0000)
https://bugs.webkit.org/show_bug.cgi?id=137417

Patch by Benjamin Poulain <bpoulain@apple.com> on 2014-10-05
Reviewed by Christophe Dumez.

Source/WebCore:

Many scripts have assumed that the unprefixed version of ElementwebkitMatchesSelector
would be Element.matchesSelector. Feature detection scripts too often test
for Element.matchesSelector instead of Element.matches before calling Element.webkitMatchesSelector.

This patch add a deprecation warning for Element.webkitMatchesSelector with the hope
that it will push the adoption of the unprefixed version.

* dom/Element.cpp:
(WebCore::Element::webkitMatchesSelector):
* dom/Element.h:
* dom/Element.idl:

LayoutTests:

* jquery/resources/src/sizzle/sizzle.js:
This is a great example of library that needs fixing. The old sizzle
we have in WebKit used "matchesSelector" instead of "matches".

* fast/dom/SelectorAPI/attrname-case-insensitive-expected.txt:
* fast/dom/SelectorAPI/attrname-case-sensitive-expected.txt:
* fast/dom/SelectorAPI/caseID-almost-strict-expected.txt:
* fast/dom/SelectorAPI/caseID-expected.txt:
* fast/dom/SelectorAPI/caseID-strict-expected.txt:
* fast/dom/SelectorAPI/caseTag-expected.txt:
* fast/dom/SelectorAPI/caseTagX-expected.txt:
* fast/dom/SelectorAPI/detached-element-expected.txt:
* fast/dom/SelectorAPI/not-supported-namespace-in-selector-expected.txt:
* fast/dom/SelectorAPI/undefined-null-stringify-expected.txt:
Update the test results due to the warning.

* fast/forms/radio/radio-live-validation-style-expected.txt:
* fast/forms/radio/radio-live-validation-style.html:
That duplicate I added back when I unprefixed Element.matches() is useless.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174336 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/dom/SelectorAPI/attrname-case-insensitive-expected.txt
LayoutTests/fast/dom/SelectorAPI/attrname-case-sensitive-expected.txt
LayoutTests/fast/dom/SelectorAPI/caseID-almost-strict-expected.txt
LayoutTests/fast/dom/SelectorAPI/caseID-expected.txt
LayoutTests/fast/dom/SelectorAPI/caseID-strict-expected.txt
LayoutTests/fast/dom/SelectorAPI/caseTag-expected.txt
LayoutTests/fast/dom/SelectorAPI/caseTagX-expected.txt
LayoutTests/fast/dom/SelectorAPI/detached-element-expected.txt
LayoutTests/fast/dom/SelectorAPI/matches-null-undefined-expected.txt
LayoutTests/fast/dom/SelectorAPI/not-supported-namespace-in-selector-expected.txt
LayoutTests/fast/dom/SelectorAPI/undefined-null-stringify-expected.txt
LayoutTests/fast/forms/radio/radio-live-validation-style-expected.txt
LayoutTests/fast/forms/radio/radio-live-validation-style.html
LayoutTests/jquery/resources/src/sizzle/sizzle.js
Source/WebCore/ChangeLog
Source/WebCore/dom/Element.cpp
Source/WebCore/dom/Element.h
Source/WebCore/dom/Element.idl

index 0b063b1..fa4d2ea 100644 (file)
@@ -1,3 +1,30 @@
+2014-10-05  Benjamin Poulain  <bpoulain@apple.com>
+
+        Add a deprecation warning for Element.webkitMatchesSelector
+        https://bugs.webkit.org/show_bug.cgi?id=137417
+
+        Reviewed by Christophe Dumez.
+
+        * jquery/resources/src/sizzle/sizzle.js:
+        This is a great example of library that needs fixing. The old sizzle
+        we have in WebKit used "matchesSelector" instead of "matches".
+
+        * fast/dom/SelectorAPI/attrname-case-insensitive-expected.txt:
+        * fast/dom/SelectorAPI/attrname-case-sensitive-expected.txt:
+        * fast/dom/SelectorAPI/caseID-almost-strict-expected.txt:
+        * fast/dom/SelectorAPI/caseID-expected.txt:
+        * fast/dom/SelectorAPI/caseID-strict-expected.txt:
+        * fast/dom/SelectorAPI/caseTag-expected.txt:
+        * fast/dom/SelectorAPI/caseTagX-expected.txt:
+        * fast/dom/SelectorAPI/detached-element-expected.txt:
+        * fast/dom/SelectorAPI/not-supported-namespace-in-selector-expected.txt:
+        * fast/dom/SelectorAPI/undefined-null-stringify-expected.txt:
+        Update the test results due to the warning.
+
+        * fast/forms/radio/radio-live-validation-style-expected.txt:
+        * fast/forms/radio/radio-live-validation-style.html:
+        That duplicate I added back when I unprefixed Element.matches() is useless.
+
 2014-10-05  Benjamin Poulain  <benjamin@webkit.org>
 
         Element.matches()'s argument is not supposed to be optional
index 870bec1..a9a05d7 100644 (file)
@@ -1,3 +1,13 @@
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
 PASS document.querySelector('div[baR]') is document.getElementById('bar')
 PASS document.getElementById('bar').matches('div[baR]') is true
 PASS document.getElementById('bar').webkitMatchesSelector('div[baR]') is true
index f5e8210..a9d3cf1 100644 (file)
@@ -1,3 +1,7 @@
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
 PASS document.querySelector('div[baR]') is document.getElementById('bar')
 PASS document.getElementById('bar').matches('div[baR]') is true
 PASS document.getElementById('bar').webkitMatchesSelector('div[baR]') is true
index 6eb192d..c4feeb4 100644 (file)
@@ -1,3 +1,7 @@
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
 PASS document.querySelector('#lower1').textContent is 'lower 1'
 PASS document.querySelector('#LOWER2') is null
 PASS document.querySelector('#UPPER1').textContent is 'UPPER 1'
index f245769..0fe1136 100644 (file)
@@ -1,3 +1,7 @@
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
 PASS document.querySelector('#lower1').textContent is 'lower 1'
 PASS document.querySelector('#LOWER2').textContent is 'lower 2'
 PASS document.querySelector('#UPPER1').textContent is 'UPPER 1'
index 6eb192d..c4feeb4 100644 (file)
@@ -1,3 +1,7 @@
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
 PASS document.querySelector('#lower1').textContent is 'lower 1'
 PASS document.querySelector('#LOWER2') is null
 PASS document.querySelector('#UPPER1').textContent is 'UPPER 1'
index 5b4a823..34a8d99 100644 (file)
@@ -1,3 +1,5 @@
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
 PASS document.querySelector('div SPAN').textContent is 'lower'
 PASS document.querySelector('div p').textContent is 'UPPER'
 PASS document.getElementById('lower1').matches('div SPAN') is true
index 661277f..f81b627 100644 (file)
@@ -1,3 +1,4 @@
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
 PASS document.querySelector('div SPAN') is null
 PASS document.getElementById('lower1').matches('div SPAN') is false
 PASS document.getElementById('lower1').webkitMatchesSelector('div SPAN') is false
index 3132207..2403450 100644 (file)
@@ -1,3 +1,5 @@
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
 This tests that querySelector, querySelectorAll and matchesSelector (webkitMatchesSelector) work with elements that are not in a document yet.
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
index 552128f..f920032 100644 (file)
@@ -1,3 +1,9 @@
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
 Test Element.matches() with no argument, null, and undefined.
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
index bfb00c0..922be41 100644 (file)
@@ -1,3 +1,15 @@
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
 This tests that we throw a NAMESPACE_ERR when parsing a selector string for querySelector and querySelectorAll that contains a namespace.
 
 PASS: document.querySelector('bbb|pre') throws: Error: NamespaceError: DOM Exception 14
index 22b5e45..4a53e9d 100644 (file)
@@ -1,3 +1,5 @@
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
+CONSOLE MESSAGE: Element.webkitMatchesSelector is deprecated. Use Element.matches instead.
 This tests that the querySelector, querySelectorAll and matchesSelector (webkitMatchesSelector) correctly stringify null and undefined to "null" and "undefined".
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
index bcf5797..e1528e5 100644 (file)
@@ -8,8 +8,6 @@ PASS backgroundOf($("radio1")) is validColor
 PASS parent.removeChild($("radio2")); backgroundOf($("radio1")) is invalidColor
 PASS $("radio1").remove(); radio2.matches(":valid") is false
 PASS radio2.remove(); radio2.matches(":valid") is true
-FAIL $("radio1").remove(); radio2.webkitMatchesSelector(":valid") should be false. Threw exception TypeError: null is not an object (evaluating '$("radio1").remove')
-PASS radio2.remove(); radio2.webkitMatchesSelector(":valid") is true
 
 Removing a checked radio button from a required radio button group by name attribute change:
 PASS $("radio2").name = "group2"; backgroundOf($("radio1")) is invalidColor
index 7f6e5b6..62962ce 100644 (file)
@@ -36,8 +36,6 @@ parent.innerHTML = '<input type=radio name=group1 required checked id=radio1>' +
 var radio2 = $('radio2');
 shouldBeFalse('$("radio1").remove(); radio2.matches(":valid")');
 shouldBeTrue('radio2.remove(); radio2.matches(":valid")');
-shouldBeFalse('$("radio1").remove(); radio2.webkitMatchesSelector(":valid")');
-shouldBeTrue('radio2.remove(); radio2.webkitMatchesSelector(":valid")');
 debug('');
 
 debug('Removing a checked radio button from a required radio button group by name attribute change:');
index b2f5496..d9d4954 100644 (file)
@@ -1200,7 +1200,7 @@ if ( document.querySelectorAll ) {
 
 (function(){
        var html = document.documentElement,
-               matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector,
+               matches = html.matches || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector,
                pseudoWorks = false;
 
        try {
index d183660..0382a47 100644 (file)
@@ -1,3 +1,22 @@
+2014-10-05  Benjamin Poulain  <bpoulain@apple.com>
+
+        Add a deprecation warning for Element.webkitMatchesSelector
+        https://bugs.webkit.org/show_bug.cgi?id=137417
+
+        Reviewed by Christophe Dumez.
+
+        Many scripts have assumed that the unprefixed version of ElementwebkitMatchesSelector
+        would be Element.matchesSelector. Feature detection scripts too often test
+        for Element.matchesSelector instead of Element.matches before calling Element.webkitMatchesSelector.
+
+        This patch add a deprecation warning for Element.webkitMatchesSelector with the hope
+        that it will push the adoption of the unprefixed version.
+
+        * dom/Element.cpp:
+        (WebCore::Element::webkitMatchesSelector):
+        * dom/Element.h:
+        * dom/Element.idl:
+
 2014-10-05  Benjamin Poulain  <benjamin@webkit.org>
 
         Element.matches()'s argument is not supposed to be optional
index 11da351..2346ad6 100644 (file)
@@ -2329,6 +2329,12 @@ Element* Element::closest(const String& selector, ExceptionCode& ec)
     return nullptr;
 }
 
+bool Element::webkitMatchesSelector(const String& selector, ExceptionCode& ec)
+{
+    document().addConsoleMessage(MessageSource::Other, MessageLevel::Warning, ASCIILiteral("Element.webkitMatchesSelector is deprecated. Use Element.matches instead."));
+    return matches(selector, ec);
+}
+
 bool Element::shouldAppearIndeterminate() const
 {
     return false;
index bdea093..0ee1c52 100644 (file)
@@ -452,6 +452,7 @@ public:
 
     virtual bool matchesReadWritePseudoClass() const;
     bool matches(const String& selectors, ExceptionCode&);
+    bool webkitMatchesSelector(const String& selectors, ExceptionCode&);
     Element* closest(const String& selectors, ExceptionCode&);
     virtual bool shouldAppearIndeterminate() const;
 
index 0764828..e70fd1c 100644 (file)
     [RaisesException] NodeList querySelectorAll(DOMString selectors);
 
     [RaisesException] boolean matches(DOMString selectors);
+    [RaisesException] boolean webkitMatchesSelector(DOMString selectors);
     [RaisesException] Element closest(DOMString selectors);    
-    [ImplementedAs=matches, RaisesException] boolean webkitMatchesSelector(DOMString selectors);
 
     // ElementTraversal API
     readonly attribute Element firstElementChild;