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 7c862be..62cf68e 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 80dd99f..23b2786 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 53fb136..99db7d0 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 1ba9691..08c0d66 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 dfe9935..9cfc282 100644 (file)
@@ -117,6 +117,8 @@ public:
     
     bool isDocNamedItem() const { return m_docNamedItem; }
 
+    bool containsJavaApplet() const;
+    
 #if ENABLE(SVG)
     SVGDocument* getSVGDocument(ExceptionCode&) const;
 #endif