<rdar://problem/4004531> Simple Sun Signed Applet throws exceptions; doesn't run
authorjens <jens@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 2 Mar 2005 01:38:17 +0000 (01:38 +0000)
committerjens <jens@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 2 Mar 2005 01:38:17 +0000 (01:38 +0000)
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@8744 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog-2005-08-23
WebCore/khtml/rendering/render_frames.cpp

index badb8268a5366acc5c4a4d7c5f371de51a3f31aa..2812b2039bc8efa12d3bc6b3946fd027fba50a7c 100644 (file)
@@ -1,3 +1,13 @@
+2005-03-01  Jens Alfke  <jens@apple.com>
+
+        Reviewed by Darin.
+
+       <rdar://problem/4004531> Simple Sun Signed Applet throws exceptions; doesn't run
+       Two fixes for the way we extract the parameter-y goodness from <object> tags.
+
+        * khtml/rendering/render_frames.cpp:
+        (RenderPartObject::updateWidget):
+
 === Safari-401 ===
 
 2005-03-01  Chris Blumenberg  <cblu@apple.com>
index 8fad7b4301788692a17e073726ea6d4957e5d3ff..dc042b7cfbb02a2044669e780c396dc65529a367 100644 (file)
@@ -699,10 +699,14 @@ void RenderPartObject::updateWidget()
 
       // Check for a child EMBED tag.
       HTMLEmbedElementImpl *embed = 0;
-      for (NodeImpl *child = o->firstChild(); child; child = child->nextSibling()) {
+      for (NodeImpl *child = o->firstChild(); child; ) {
           if (child->id() == ID_EMBED) {
               embed = static_cast<HTMLEmbedElementImpl *>( child );
               break;
+          } else if (child->id() == ID_OBJECT) {
+              child = child->nextSibling();         // Don't descend into nested OBJECT tags
+          } else {
+              child = child->traverseNextNode(o);   // Otherwise descend (EMBEDs may be inside COMMENT tags)
           }
       }
       
@@ -762,6 +766,16 @@ void RenderPartObject::updateWidget()
           child = child->nextSibling();
       }
       
+      // When OBJECT is used for an applet via Sun's Java plugin, the CODEBASE attribute in the tag
+      // points to the Java plugin itself (an ActiveX component) while the actual applet CODEBASE is
+      // in a PARAM tag. See <http://java.sun.com/products/plugin/1.2/docs/tags.html>. This means
+      // we have to explicitly suppress the tag's CODEBASE attribute if there is none in a PARAM,
+      // else our Java plugin will misinterpret it. [4004531]
+      if (!embed && serviceType.lower() == "application/x-java-applet") {
+          bool dummyValue = true;
+          uniqueParamNames.insert("codebase", &dummyValue); // pretend we found it in a PARAM already
+      }
+      
       // Turn the attributes of either the EMBED tag or OBJECT tag into arrays, but don't override PARAM values.
       NamedAttrMapImpl* attributes = embedOrObject->attributes();
       if (attributes) {