Title: [152754] trunk/Source/WebCore
Revision
152754
Author
[email protected]
Date
2013-07-16 19:04:00 -0700 (Tue, 16 Jul 2013)

Log Message

Many crashes loading Java applets after r152701
https://bugs.webkit.org/show_bug.cgi?id=118760
<rdar://problem/14462836>

Reviewed by Dean Jackson.

* html/HTMLAppletElement.cpp:
(WebCore::HTMLAppletElement::updateWidget):
Re-acquire the renderer after calling createJavaAppletWidget,
because it can cause reattach, leaving our renderer pointer stale.

* loader/SubframeLoader.cpp:
(WebCore::SubframeLoader::createJavaAppletWidget):
Null-check renderer, as element->renderEmbeddedObject() can very clearly
return null in some cases.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (152753 => 152754)


--- trunk/Source/WebCore/ChangeLog	2013-07-17 01:09:18 UTC (rev 152753)
+++ trunk/Source/WebCore/ChangeLog	2013-07-17 02:04:00 UTC (rev 152754)
@@ -1,3 +1,21 @@
+2013-07-16  Tim Horton  <[email protected]>
+
+        Many crashes loading Java applets after r152701
+        https://bugs.webkit.org/show_bug.cgi?id=118760
+        <rdar://problem/14462836>
+
+        Reviewed by Dean Jackson.
+
+        * html/HTMLAppletElement.cpp:
+        (WebCore::HTMLAppletElement::updateWidget):
+        Re-acquire the renderer after calling createJavaAppletWidget,
+        because it can cause reattach, leaving our renderer pointer stale.
+
+        * loader/SubframeLoader.cpp:
+        (WebCore::SubframeLoader::createJavaAppletWidget):
+        Null-check renderer, as element->renderEmbeddedObject() can very clearly
+        return null in some cases.
+
 2013-07-16  Pratik Solanki  <[email protected]>
 
         Missing break in WebGLRenderingContext::validateCompressedTexFuncData()

Modified: trunk/Source/WebCore/html/HTMLAppletElement.cpp (152753 => 152754)


--- trunk/Source/WebCore/html/HTMLAppletElement.cpp	2013-07-17 01:09:18 UTC (rev 152753)
+++ trunk/Source/WebCore/html/HTMLAppletElement.cpp	2013-07-17 02:04:00 UTC (rev 152754)
@@ -153,7 +153,13 @@
     Frame* frame = document()->frame();
     ASSERT(frame);
 
-    renderer->setWidget(frame->loader()->subframeLoader()->createJavaAppletWidget(roundedIntSize(LayoutSize(contentWidth, contentHeight)), this, paramNames, paramValues));
+    RefPtr<Widget> widget = frame->loader()->subframeLoader()->createJavaAppletWidget(roundedIntSize(LayoutSize(contentWidth, contentHeight)), this, paramNames, paramValues);
+
+    // createJavaAppletWidget can call setPluginUnavailabilityReason, which can cause reattach and destroy our renderer.
+
+    renderer = renderEmbeddedObject();
+    if (renderer)
+        renderer->setWidget(widget.release());
 }
 
 bool HTMLAppletElement::canEmbedJava() const

Modified: trunk/Source/WebCore/loader/SubframeLoader.cpp (152753 => 152754)


--- trunk/Source/WebCore/loader/SubframeLoader.cpp	2013-07-17 01:09:18 UTC (rev 152753)
+++ trunk/Source/WebCore/loader/SubframeLoader.cpp	2013-07-17 02:04:00 UTC (rev 152754)
@@ -324,7 +324,7 @@
     if (!widget) {
         RenderEmbeddedObject* renderer = element->renderEmbeddedObject();
 
-        if (!renderer->showsUnavailablePluginIndicator())
+        if (renderer && !renderer->showsUnavailablePluginIndicator())
             renderer->setPluginUnavailabilityReason(RenderEmbeddedObject::PluginMissing);
         return 0;
     }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to