fast/images/extra-image-in-image-document.html crashes when run after embed-image...
authormitz@apple.com <mitz@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 3 Apr 2011 23:22:58 +0000 (23:22 +0000)
committermitz@apple.com <mitz@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 3 Apr 2011 23:22:58 +0000 (23:22 +0000)
https://bugs.webkit.org/show_bug.cgi?id=57733

Reviewed by Maciej Stachowiak.

The crash happens because resetting the page scale as part of preparing the WebView for the
next test triggered layout, which in turn caused a plug-in to make a resource request, and
DumpRenderTree's delegate to be dispatched. The delegate doesn't expect to be called between
tests, and it references the layout test controller, which is null.

* page/Frame.cpp:
(WebCore::Frame::scalePage): Avoid an unnecessary layout if the page scale isn't changing. This
is more efficient, and has the side effect of avoiding the crash in DumpRenderTree, although
DumpRenderTree could still crash when after a test with disabled plug-ins and a non-1 page scale.
I think there are currently no such tests, so I am not fixing DumpRenderTree.

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

Source/WebCore/ChangeLog
Source/WebCore/page/Frame.cpp

index ea2220e949c572eabfe781dcf4b48a2705130b6a..d333bf25c272e58dcbba55e484ce0eed5a50f71c 100644 (file)
@@ -1,3 +1,21 @@
+2011-04-03  Dan Bernstein  <mitz@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+
+        fast/images/extra-image-in-image-document.html crashes when run after embed-image.html
+        https://bugs.webkit.org/show_bug.cgi?id=57733
+
+        The crash happens because resetting the page scale as part of preparing the WebView for the
+        next test triggered layout, which in turn caused a plug-in to make a resource request, and
+        DumpRenderTreeÕs delegate to be dispatched. The delegate doesnÕt expect to be called between
+        tests, and it references the layout test controller, which is null.
+
+        * page/Frame.cpp:
+        (WebCore::Frame::scalePage): Avoid an unnecessary layout if the page scale isnÕt changing. This
+        is more efficient, and has the side effect of avoiding the crash in DumpRenderTree, although
+        DumpRenderTree could still crash when after a test with disabled plug-ins and a non-1 page scale.
+        I think there are currently no such tests, so I am not fixing DumpRenderTree.
+
 2011-04-03  Eric Seidel  <eric@webkit.org>
 
         Reviewed by Ryosuke Niwa.
index 409bf81cec008bde52b67d84f03120eda14a749f..429c0355681ed8ae2c11c858dc8ab440ac1a4b9d 100644 (file)
@@ -997,16 +997,18 @@ void Frame::scalePage(float scale, const IntPoint& origin)
     if (!document)
         return;
 
-    m_pageScaleFactor = scale;
+    if (scale != m_pageScaleFactor) {
+        m_pageScaleFactor = scale;
 
-    if (document->renderer())
-        document->renderer()->setNeedsLayout(true);
+        if (document->renderer())
+            document->renderer()->setNeedsLayout(true);
 
-    document->recalcStyle(Node::Force);
+        document->recalcStyle(Node::Force);
 
 #if USE(ACCELERATED_COMPOSITING)
-    updateContentsScale(scale);
+        updateContentsScale(scale);
 #endif
+    }
 
     if (FrameView* view = this->view()) {
         if (document->renderer() && document->renderer()->needsLayout() && view->didFirstLayout())