LayoutTests:
authorbeidson <beidson@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 10 May 2007 08:55:44 +0000 (08:55 +0000)
committerbeidson <beidson@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 10 May 2007 08:55:44 +0000 (08:55 +0000)
        Reviewed by Oliver

        Fix for http://bugs.webkit.org/show_bug.cgi?id=13636 and <rdar://problem/5190816>

        When creating the applets collection, be sure to only count Objects if they contain
        a java applet

        * dom/html/level2/html/AppletsCollection-expected.txt: Added.
        * dom/html/level2/html/AppletsCollection.html: Added.

WebCore:

        Reviewed by Oliver

        Fix for http://bugs.webkit.org/show_bug.cgi?id=13636 and <rdar://problem/5190816>

        When creating the applets collection, be sure to only count Objects if they contain
        a java applet

        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::traverseNextItem): Add the qualifier for Objects that
          containsJavaApplet() must be true

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::containsJavaApplet): Check this Object element and inner
          nodes for any Java applets
        * html/HTMLObjectElement.h:

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

LayoutTests/ChangeLog
LayoutTests/dom/html/level2/html/AppletsCollection-expected.txt [new file with mode: 0644]
LayoutTests/dom/html/level2/html/AppletsCollection.html [new file with mode: 0644]
WebCore/ChangeLog
WebCore/html/HTMLCollection.cpp
WebCore/html/HTMLObjectElement.cpp
WebCore/html/HTMLObjectElement.h

index 7c862be809de637cd3b1296208fe7921859cd1a0..62cf68e17807701290a4788c78987a00fe60b08b 100644 (file)
@@ -1,3 +1,15 @@
+2007-05-10  Brady Eidson <beidson@apple.com>
+
+        Reviewed by Oliver
+
+        Fix for http://bugs.webkit.org/show_bug.cgi?id=13636 and <rdar://problem/5190816>
+
+        When creating the applets collection, be sure to only count Objects if they contain
+        a java applet
+
+        * dom/html/level2/html/AppletsCollection-expected.txt: Added.
+        * dom/html/level2/html/AppletsCollection.html: Added.
+
 2007-05-09  Geoffrey Garen  <ggaren@apple.com>
 
         Reviewed by Maciej Stachowiak.
diff --git a/LayoutTests/dom/html/level2/html/AppletsCollection-expected.txt b/LayoutTests/dom/html/level2/html/AppletsCollection-expected.txt
new file mode 100644 (file)
index 0000000..4cd41fb
--- /dev/null
@@ -0,0 +1,18 @@
+This test demonstrates a couple of object tags being added that do not contain Java applets. Previously these Object element would be included in the document.applets collection even though the spec says that collection should contain only Applet elements and Object elements that contain applets.
+
+As the document is parsed, javascript will output the size of the document.applets collection after each Object tag is inserted into the document. For this test the count should always be zero.
+
+Tragically we cannot have any actual Java Applets referenced here because when DRT loads the Java VM it hangs. If that bug is resolved this test should also be amended to add a dummy Applet using both the Applet tag and a few different uses of the Object tag.
+
+Applets length is currently 0
+
+
+Applets length is currently 0
+
+
+Applets length is currently 0
+
+
+Applets length is currently 0
+
+
diff --git a/LayoutTests/dom/html/level2/html/AppletsCollection.html b/LayoutTests/dom/html/level2/html/AppletsCollection.html
new file mode 100644 (file)
index 0000000..ef6fbfa
--- /dev/null
@@ -0,0 +1,46 @@
+<html>
+<head>
+<title>Fix for 13636</title>
+<script>
+    if (window.layoutTestController) {
+        layoutTestController.dumpAsText();
+    }
+    
+    function outputAppletsLength() {
+        document.write("<p>");
+        if (document.applets)
+            document.write("Applets length is currently " + document.applets.length); 
+        else
+            document.write("There is no applets collection yet");
+        document.write("</p>");
+    }
+    
+</script>
+</head>
+<body>
+<p>This test demonstrates a couple of object tags being added that do not contain Java applets.  Previously these Object element would be included in the document.applets collection even though the spec says that collection should contain only Applet elements and Object elements that contain applets.</p>
+<p>As the document is parsed, javascript will output the size of the document.applets collection after each Object tag is inserted into the document.  For this test the count should always be zero.</p>
+<p>Tragically we cannot have any actual Java Applets referenced here because when DRT loads the Java VM it hangs.  If that bug is resolved this test should also be amended to add a dummy Applet using both the Applet tag and a few different uses of the Object tag.</p>
+
+<script>outputAppletsLength();</script>
+
+<object type="application/not-a-real-applet" width=500 height=50>
+<param name="code" value="ZOMG.class">
+<param name="text" value="ZOMG OBJECT JAVA APPLET (but not really!)">
+</object>
+
+<script>outputAppletsLength();</script>
+
+<object width=500 height=50>
+Nothing here!
+</object>
+
+<script>outputAppletsLength();</script>
+
+<object data="w3c_main.png" type="image/png">
+</object>
+
+<script>outputAppletsLength();</script>
+
+</body>
+</html>
index 80dd99fe1e289928ba72f4379dde01eb1aec4175..23b27865238fd12df736ff4f31f947f943dbb972 100644 (file)
@@ -1,3 +1,21 @@
+2007-05-10  Brady Eidson <beidson@apple.com>
+
+        Reviewed by Oliver
+
+        Fix for http://bugs.webkit.org/show_bug.cgi?id=13636 and <rdar://problem/5190816>
+
+        When creating the applets collection, be sure to only count Objects if they contain
+        a java applet
+
+        * html/HTMLCollection.cpp:
+        (WebCore::HTMLCollection::traverseNextItem): Add the qualifier for Objects that 
+          containsJavaApplet() must be true
+
+        * html/HTMLObjectElement.cpp:
+        (WebCore::HTMLObjectElement::containsJavaApplet): Check this Object element and inner
+          nodes for any Java applets
+        * html/HTMLObjectElement.h: 
+
 2007-05-10  David Hyatt  <hyatt@apple.com>
 
         Fix for:
index 53fb13666bc1701a6d8b57380ef6882209436590..99db7d05171d3c405bb6fce5476c63df244f9568 100644 (file)
@@ -28,6 +28,7 @@
 #include "HTMLDocument.h"
 #include "HTMLElement.h"
 #include "HTMLNames.h"
+#include "HTMLObjectElement.h"
 
 namespace WebCore {
 
@@ -148,8 +149,9 @@ Node *HTMLCollection::traverseNextItem(Node *current) const
                 if (e->hasLocalName(areaTag))
                     found = true;
                 break;
-            case DocApplets:   // all OBJECT and APPLET elements
-                if (e->hasLocalName(objectTag) || e->hasLocalName(appletTag))
+            case DocApplets:   // all APPLET elements and OBJECT elements that contain Java Applets
+                if (e->hasLocalName(appletTag) || 
+                    (e->hasLocalName(objectTag) && static_cast<HTMLObjectElement*>(e)->containsJavaApplet()))
                     found = true;
                 break;
             case DocEmbeds:   // all EMBED elements
index 1ba9691dbb305f8b761a868eb004c7ab0632f5cc..08c0d663c5dec712adcaeb5096321f90928253d7 100644 (file)
@@ -469,6 +469,30 @@ void HTMLObjectElement::setVspace(int value)
     setAttribute(vspaceAttr, String::number(value));
 }
 
+bool HTMLObjectElement::containsJavaApplet() const
+{
+    if (type().lower() == "application/x-java-applet")
+        return true;
+        
+    Node* child = firstChild();
+    while (child) {
+        if (child->isElementNode()) {
+            Element* e = static_cast<Element*>(child);
+            if (e->hasTagName(paramTag) &&
+                e->getAttribute(nameAttr).domString().lower() == "type" &&
+                e->getAttribute(valueAttr).domString().lower() == "application/x-java-applet")
+                return true;
+            else if (e->hasTagName(objectTag) && static_cast<HTMLObjectElement*>(e)->containsJavaApplet())
+                return true;
+            else if (e->hasTagName(appletTag))
+                return true;
+        }
+        child = child->nextSibling();
+    }
+    
+    return false;
+}
+
 #if ENABLE(SVG)
 SVGDocument* HTMLObjectElement::getSVGDocument(ExceptionCode& ec) const
 {
index dfe993588b079ecd89b1354552d901f9b0f89ddf..9cfc282dc748562f44c8774c6d5eb37ed2a35639 100644 (file)
@@ -117,6 +117,8 @@ public:
     
     bool isDocNamedItem() const { return m_docNamedItem; }
 
+    bool containsJavaApplet() const;
+    
 #if ENABLE(SVG)
     SVGDocument* getSVGDocument(ExceptionCode&) const;
 #endif