HTMLCollection's named getter should only do 'name' attribute matching for HTMLElements
authorcdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 2 Aug 2016 19:13:42 +0000 (19:13 +0000)
committercdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 2 Aug 2016 19:13:42 +0000 (19:13 +0000)
https://bugs.webkit.org/show_bug.cgi?id=160456

Reviewed by Darin Adler.

LayoutTests/imported/w3c:

* web-platform-tests/dom/nodes/Document-getElementsByTagName-expected.txt:
Rebaseline. We are still failing but on the next check.

* web-platform-tests/dom/nodes/Element-children-expected.txt:
Rebaseline now that one more check is passing.

Source/WebCore:

HTMLCollection's named getter should only do 'name' attribute matching for HTMLElements:
- https://dom.spec.whatwg.org/#dom-htmlcollection-nameditem

Our slow path which relies on HTMLCollection::updateNamedElementCache() does the right
thing. However, we have a fast path in
CachedHTMLCollection<HTMLCollectionClass, traversalType>::namedItem() that was missing a
check.

Firefox and Chrome both behave correctly here.

No new tests, rebaselined existing tests.

* html/CachedHTMLCollection.h:
(WebCore::traversalType>::namedItem):

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

LayoutTests/imported/w3c/ChangeLog
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementsByTagName-expected.txt
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-children-expected.txt
Source/WebCore/ChangeLog
Source/WebCore/html/CachedHTMLCollection.h

index 673eb8b..aa3e6e8 100644 (file)
@@ -1,3 +1,16 @@
+2016-08-02  Chris Dumez  <cdumez@apple.com>
+
+        HTMLCollection's named getter should only do 'name' attribute matching for HTMLElements
+        https://bugs.webkit.org/show_bug.cgi?id=160456
+
+        Reviewed by Darin Adler.
+
+        * web-platform-tests/dom/nodes/Document-getElementsByTagName-expected.txt:
+        Rebaseline. We are still failing but on the next check.
+
+        * web-platform-tests/dom/nodes/Element-children-expected.txt:
+        Rebaseline now that one more check is passing.
+
 2016-08-02  Youenn Fablet  <youenn@apple.com>
 
         Skip fetch API worker tests in Debug mode
index 0756dbb..c0f0aed 100644 (file)
@@ -8,7 +8,7 @@ FAIL Shouldn't be able to set unsigned properties on a HTMLCollection (strict mo
     }" did not throw
 PASS Should be able to set expando shadowing a proto prop (item) 
 PASS Should be able to set expando shadowing a proto prop (namedItem) 
-FAIL hasOwnProperty, getOwnPropertyDescriptor, getOwnPropertyNames assert_false: expected false got true
+FAIL hasOwnProperty, getOwnPropertyDescriptor, getOwnPropertyNames assert_true: desc.configurable expected true got false
 PASS HTML element with uppercase tagName never matches in HTML Documents 
 PASS Element in non-HTML namespace, no prefix, lowercase name 
 PASS Element in non-HTML namespace, no prefix, uppercase name 
index 105289f..5baef41 100644 (file)
@@ -1,5 +1,27 @@
 2016-08-02  Chris Dumez  <cdumez@apple.com>
 
+        HTMLCollection's named getter should only do 'name' attribute matching for HTMLElements
+        https://bugs.webkit.org/show_bug.cgi?id=160456
+
+        Reviewed by Darin Adler.
+
+        HTMLCollection's named getter should only do 'name' attribute matching for HTMLElements:
+        - https://dom.spec.whatwg.org/#dom-htmlcollection-nameditem
+
+        Our slow path which relies on HTMLCollection::updateNamedElementCache() does the right
+        thing. However, we have a fast path in 
+        CachedHTMLCollection<HTMLCollectionClass, traversalType>::namedItem() that was missing a
+        check.
+
+        Firefox and Chrome both behave correctly here.
+
+        No new tests, rebaselined existing tests.
+
+        * html/CachedHTMLCollection.h:
+        (WebCore::traversalType>::namedItem):
+
+2016-08-02  Chris Dumez  <cdumez@apple.com>
+
         Kill [StrictTypeChecking] IDL extended attribute
         https://bugs.webkit.org/show_bug.cgi?id=160382
 
index a7ff3a0..ed7bad6 100644 (file)
@@ -136,9 +136,12 @@ Element* CachedHTMLCollection<HTMLCollectionClass, traversalType>::namedItem(con
                 candidate = treeScope.getElementById(name);
         } else if (treeScope.hasElementWithName(*name.impl())) {
             if (!treeScope.containsMultipleElementsWithName(name)) {
-                candidate = treeScope.getElementByName(name);
-                if (candidate && type() == DocAll && !nameShouldBeVisibleInDocumentAll(*candidate))
-                    candidate = nullptr;
+                if ((candidate = treeScope.getElementByName(name))) {
+                    if (!is<HTMLElement>(*candidate))
+                        candidate = nullptr;
+                    else if (type() == DocAll && !nameShouldBeVisibleInDocumentAll(*candidate))
+                        candidate = nullptr;
+                }
             }
         } else
             return nullptr;