[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

simon.fraser at apple.com simon.fraser at apple.com
Wed Dec 22 15:34:31 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 89b838963e2be3b7827031d09270fd04d1f1ca86
Author: simon.fraser at apple.com <simon.fraser at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Mon Nov 8 17:48:22 2010 +0000

    2010-11-08  Simon Fraser  <simon.fraser at apple.com>
    
            Reviewed by Sam Weinig.
    
            Allow applets to participate in accelerated compositing
            https://bugs.webkit.org/show_bug.cgi?id=49117
            <rdar://problem/8625819>
    
            Add RenderApplet to the list of renderers that can optionally get RenderLayers,
            and be composited for some reason.
    
            Not currently testable.
    
            * rendering/RenderApplet.h: Outdented the class declaration.
    
            * rendering/RenderApplet.cpp:
            (WebCore::RenderApplet::requiresLayer): Return true if the underlying widget
            has a platform layer.
            (WebCore::RenderApplet::allowsAcceleratedCompositing): Check the widget to see
            if it has a platform layer.
    
            * rendering/RenderLayer.cpp:
            (WebCore::RenderLayer::shouldBeNormalFlowOnly): Reformat, and add isApplet().
            (WebCore::RenderLayer::isSelfPaintingLayer): Reformat, and add isApplet().
            * rendering/RenderLayerBacking.cpp:
            (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration): Use 'renderer' local variable
            for efficiency. Now check for embedded objects and applets.
            * rendering/RenderLayerCompositor.cpp:
            (WebCore::RenderLayerCompositor::requiresCompositingForPlugin): Check for embedded objects and applets.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@71536 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index b42d806..129ce69 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,33 @@
+2010-11-08  Simon Fraser  <simon.fraser at apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Allow applets to participate in accelerated compositing
+        https://bugs.webkit.org/show_bug.cgi?id=49117
+        <rdar://problem/8625819>
+        
+        Add RenderApplet to the list of renderers that can optionally get RenderLayers,
+        and be composited for some reason.
+
+        Not currently testable.
+
+        * rendering/RenderApplet.h: Outdented the class declaration.
+
+        * rendering/RenderApplet.cpp:
+        (WebCore::RenderApplet::requiresLayer): Return true if the underlying widget
+        has a platform layer.
+        (WebCore::RenderApplet::allowsAcceleratedCompositing): Check the widget to see
+        if it has a platform layer.
+
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::shouldBeNormalFlowOnly): Reformat, and add isApplet().
+        (WebCore::RenderLayer::isSelfPaintingLayer): Reformat, and add isApplet().
+        * rendering/RenderLayerBacking.cpp:
+        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration): Use 'renderer' local variable
+        for efficiency. Now check for embedded objects and applets.
+        * rendering/RenderLayerCompositor.cpp:
+        (WebCore::RenderLayerCompositor::requiresCompositingForPlugin): Check for embedded objects and applets.
+
 2010-11-08  Xan Lopez  <xlopez at igalia.com>
 
         Reviewed by Martin Robinson.
diff --git a/WebCore/rendering/RenderApplet.cpp b/WebCore/rendering/RenderApplet.cpp
index f9eb56e..eaa3535 100644
--- a/WebCore/rendering/RenderApplet.cpp
+++ b/WebCore/rendering/RenderApplet.cpp
@@ -26,6 +26,7 @@
 #include "HTMLAppletElement.h"
 #include "HTMLNames.h"
 #include "HTMLParamElement.h"
+#include "PluginViewBase.h"
 #include "Widget.h"
 
 namespace WebCore {
@@ -91,4 +92,19 @@ void RenderApplet::layout()
     setNeedsLayout(false);
 }
 
+#if USE(ACCELERATED_COMPOSITING)
+bool RenderApplet::requiresLayer() const
+{
+    if (RenderWidget::requiresLayer())
+        return true;
+    
+    return allowsAcceleratedCompositing();
+}
+
+bool RenderApplet::allowsAcceleratedCompositing() const
+{
+    return widget() && widget()->isPluginViewBase() && static_cast<PluginViewBase*>(widget())->platformLayer();
+}
+#endif
+
 } // namespace WebCore
diff --git a/WebCore/rendering/RenderApplet.h b/WebCore/rendering/RenderApplet.h
index 641568d..007902d 100644
--- a/WebCore/rendering/RenderApplet.h
+++ b/WebCore/rendering/RenderApplet.h
@@ -27,34 +27,42 @@
 
 namespace WebCore {
 
-    class HTMLAppletElement;
+class HTMLAppletElement;
 
-    class RenderApplet : public RenderWidget {
-    public:
-        RenderApplet(HTMLAppletElement*, const HashMap<String, String>& args);
-        virtual ~RenderApplet();
+class RenderApplet : public RenderWidget {
+public:
+    RenderApplet(HTMLAppletElement*, const HashMap<String, String>& args);
+    virtual ~RenderApplet();
 
-        void createWidgetIfNecessary();
+    void createWidgetIfNecessary();
 
-    private:
-        virtual const char* renderName() const { return "RenderApplet"; }
+#if USE(ACCELERATED_COMPOSITING)
+    virtual bool allowsAcceleratedCompositing() const;
+#endif
 
-        virtual bool isApplet() const { return true; }
+private:
+    virtual const char* renderName() const { return "RenderApplet"; }
 
-        virtual void layout();
-        virtual IntSize intrinsicSize() const;
+    virtual bool isApplet() const { return true; }
 
-        HashMap<String, String> m_args;
-    };
+    virtual void layout();
+    virtual IntSize intrinsicSize() const;
 
-    inline RenderApplet* toRenderApplet(RenderObject* object)
-    {
-        ASSERT(!object || object->isApplet());
-        return static_cast<RenderApplet*>(object);
-    }
+#if USE(ACCELERATED_COMPOSITING)
+    virtual bool requiresLayer() const;
+#endif
 
-    // This will catch anyone doing an unnecessary cast.
-    void toRenderApplet(const RenderApplet*);
+    HashMap<String, String> m_args;
+};
+
+inline RenderApplet* toRenderApplet(RenderObject* object)
+{
+    ASSERT(!object || object->isApplet());
+    return static_cast<RenderApplet*>(object);
+}
+
+// This will catch anyone doing an unnecessary cast.
+void toRenderApplet(const RenderApplet*);
 
 } // namespace WebCore
 
diff --git a/WebCore/rendering/RenderLayer.cpp b/WebCore/rendering/RenderLayer.cpp
index 4e8ceec..2f89eb5 100644
--- a/WebCore/rendering/RenderLayer.cpp
+++ b/WebCore/rendering/RenderLayer.cpp
@@ -3745,8 +3745,14 @@ void RenderLayer::repaintIncludingNonCompositingDescendants(RenderBoxModelObject
 
 bool RenderLayer::shouldBeNormalFlowOnly() const
 {
-    return (renderer()->hasOverflowClip() || renderer()->hasReflection() || renderer()->hasMask() || renderer()->isVideo() || renderer()->isEmbeddedObject() || 
-            renderer()->isRenderIFrame() || renderer()->style()->specifiesColumns())
+    return (renderer()->hasOverflowClip()
+                || renderer()->hasReflection()
+                || renderer()->hasMask()
+                || renderer()->isVideo()
+                || renderer()->isEmbeddedObject()
+                || renderer()->isApplet()
+                || renderer()->isRenderIFrame()
+                || renderer()->style()->specifiesColumns())
             && !renderer()->isPositioned()
             && !renderer()->isRelPositioned()
             && !renderer()->hasTransform()
@@ -3755,7 +3761,14 @@ bool RenderLayer::shouldBeNormalFlowOnly() const
 
 bool RenderLayer::isSelfPaintingLayer() const
 {
-    return !isNormalFlowOnly() || renderer()->hasReflection() || renderer()->hasMask() || renderer()->isTableRow() || renderer()->isVideo() || renderer()->isEmbeddedObject() || renderer()->isRenderIFrame();
+    return !isNormalFlowOnly()
+        || renderer()->hasReflection()
+        || renderer()->hasMask()
+        || renderer()->isTableRow()
+        || renderer()->isVideo()
+        || renderer()->isEmbeddedObject()
+        || renderer()->isApplet()
+        || renderer()->isRenderIFrame();
 }
 
 void RenderLayer::styleChanged(StyleDifference diff, const RenderStyle*)
diff --git a/WebCore/rendering/RenderLayerBacking.cpp b/WebCore/rendering/RenderLayerBacking.cpp
index 777d07f..4f16800 100644
--- a/WebCore/rendering/RenderLayerBacking.cpp
+++ b/WebCore/rendering/RenderLayerBacking.cpp
@@ -46,6 +46,7 @@
 #include "InspectorInstrumentation.h"
 #include "KeyframeList.h"
 #include "PluginViewBase.h"
+#include "RenderApplet.h"
 #include "RenderBox.h"
 #include "RenderIFrame.h"
 #include "RenderImage.h"
@@ -224,6 +225,7 @@ void RenderLayerBacking::updateAfterLayout(UpdateDepth updateDepth, bool isUpdat
 bool RenderLayerBacking::updateGraphicsLayerConfiguration()
 {
     RenderLayerCompositor* compositor = this->compositor();
+    RenderObject* renderer = this->renderer();
 
     bool layerConfigChanged = false;
     if (updateForegroundLayer(compositor->needsContentsCompositingLayer(m_owningLayer)))
@@ -232,7 +234,7 @@ bool RenderLayerBacking::updateGraphicsLayerConfiguration()
     if (updateClippingLayers(compositor->clippedByAncestor(m_owningLayer), compositor->clipsCompositingDescendants(m_owningLayer)))
         layerConfigChanged = true;
 
-    if (updateMaskLayer(m_owningLayer->renderer()->hasMask()))
+    if (updateMaskLayer(renderer->hasMask()))
         m_graphicsLayer->setMaskLayer(m_maskLayer.get());
 
     if (m_owningLayer->hasReflection()) {
@@ -246,27 +248,28 @@ bool RenderLayerBacking::updateGraphicsLayerConfiguration()
     if (isDirectlyCompositedImage())
         updateImageContents();
 
-    if (renderer()->isEmbeddedObject() && toRenderEmbeddedObject(renderer())->allowsAcceleratedCompositing()) {
-        PluginViewBase* pluginViewBase = static_cast<PluginViewBase*>(toRenderEmbeddedObject(renderer())->widget());
+    if ((renderer->isEmbeddedObject() && toRenderEmbeddedObject(renderer)->allowsAcceleratedCompositing())
+        || (renderer->isApplet() && toRenderApplet(renderer)->allowsAcceleratedCompositing())) {
+        PluginViewBase* pluginViewBase = static_cast<PluginViewBase*>(toRenderWidget(renderer)->widget());
         m_graphicsLayer->setContentsToMedia(pluginViewBase->platformLayer());
     }
 #if ENABLE(VIDEO)
-    else if (renderer()->isVideo()) {
-        HTMLMediaElement* mediaElement = static_cast<HTMLMediaElement*>(renderer()->node());
+    else if (renderer->isVideo()) {
+        HTMLMediaElement* mediaElement = static_cast<HTMLMediaElement*>(renderer->node());
         m_graphicsLayer->setContentsToMedia(mediaElement->platformLayer());
     }
 #endif
 #if ENABLE(3D_CANVAS) || ENABLE(ACCELERATED_2D_CANVAS)
-    else if (isAcceleratedCanvas(renderer())) {
-        HTMLCanvasElement* canvas = static_cast<HTMLCanvasElement*>(renderer()->node());
+    else if (isAcceleratedCanvas(renderer)) {
+        HTMLCanvasElement* canvas = static_cast<HTMLCanvasElement*>(renderer->node());
         if (CanvasRenderingContext* context = canvas->renderingContext())
             m_graphicsLayer->setContentsToCanvas(context->platformLayer());
         layerConfigChanged = true;
     }
 #endif
 
-    if (renderer()->isRenderIFrame())
-        layerConfigChanged = RenderLayerCompositor::parentIFrameContentLayers(toRenderIFrame(renderer()));
+    if (renderer->isRenderIFrame())
+        layerConfigChanged = RenderLayerCompositor::parentIFrameContentLayers(toRenderIFrame(renderer));
 
     return layerConfigChanged;
 }
diff --git a/WebCore/rendering/RenderLayerCompositor.cpp b/WebCore/rendering/RenderLayerCompositor.cpp
index 1468b6c..a538857 100644
--- a/WebCore/rendering/RenderLayerCompositor.cpp
+++ b/WebCore/rendering/RenderLayerCompositor.cpp
@@ -42,6 +42,7 @@
 #include "HitTestResult.h"
 #include "NodeList.h"
 #include "Page.h"
+#include "RenderApplet.h"
 #include "RenderEmbeddedObject.h"
 #include "RenderIFrame.h"
 #include "RenderLayerBacking.h"
@@ -1227,21 +1228,20 @@ bool RenderLayerCompositor::requiresCompositingForCanvas(RenderObject* renderer)
 
 bool RenderLayerCompositor::requiresCompositingForPlugin(RenderObject* renderer) const
 {
-    if (!renderer->isEmbeddedObject())
-        return false;
-    
-    RenderEmbeddedObject* embedRenderer = toRenderEmbeddedObject(renderer);
-    if (!embedRenderer->allowsAcceleratedCompositing())
+    bool composite = (renderer->isEmbeddedObject() && toRenderEmbeddedObject(renderer)->allowsAcceleratedCompositing())
+                  || (renderer->isApplet() && toRenderApplet(renderer)->allowsAcceleratedCompositing());
+    if (!composite)
         return false;
 
     m_compositingDependsOnGeometry = true;
-
+    
+    RenderWidget* pluginRenderer = toRenderWidget(renderer);
     // If we can't reliably know the size of the plugin yet, don't change compositing state.
-    if (renderer->needsLayout())
-        return embedRenderer->hasLayer() && embedRenderer->layer()->isComposited();
+    if (pluginRenderer->needsLayout())
+        return pluginRenderer->hasLayer() && pluginRenderer->layer()->isComposited();
 
     // Don't go into compositing mode if height or width are zero, or size is 1x1.
-    IntRect contentBox = embedRenderer->contentBoxRect();
+    IntRect contentBox = pluginRenderer->contentBoxRect();
     return contentBox.height() * contentBox.width() > 1;
 }
 
diff --git a/WebKit/mac/ChangeLog b/WebKit/mac/ChangeLog
index dc36fc1..9626c58 100644
--- a/WebKit/mac/ChangeLog
+++ b/WebKit/mac/ChangeLog
@@ -1,3 +1,18 @@
+2010-11-08  Simon Fraser  <simon.fraser at apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Allow applets to participate in accelerated compositing
+        https://bugs.webkit.org/show_bug.cgi?id=49117
+        <rdar://problem/8625819>
+        
+        If Java is being loaded via the Netscape Plugin API, create a
+        NetscapePluginWidget so that it has an implementation of platformLayer().
+        
+        Also clean up by using early returns.
+
+        * WebCoreSupport/WebFrameLoaderClient.mm:
+
 2010-11-07  Adam Barth  <abarth at webkit.org>
 
         Reviewed by Eric Seidel.
diff --git a/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm b/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm
index 3053b49..7ca27c0 100644
--- a/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm
+++ b/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm
@@ -1752,6 +1752,8 @@ PassRefPtr<Widget> WebFrameLoaderClient::createJavaAppletWidget(const IntSize& s
                 [values addObject:[NSString stringWithFormat:@"%d", size.height()]];
             }
             view = pluginView(m_webFrame.get(), (WebPluginPackage *)pluginPackage, names, values, baseURL, kit(element), NO);
+            if (view)
+                return adoptRef(new PluginWidget(view));
         } 
 #if ENABLE(NETSCAPE_PLUGIN_API)
         else if ([pluginPackage isKindOfClass:[WebNetscapePluginPackage class]]) {
@@ -1764,6 +1766,8 @@ PassRefPtr<Widget> WebFrameLoaderClient::createJavaAppletWidget(const IntSize& s
                 attributeValues:kit(paramValues)
                 loadManually:NO
                 element:element] autorelease];
+            if (view)
+                return adoptRef(new NetscapePluginWidget(view));
         } else {
             ASSERT_NOT_REACHED();
         }
@@ -1781,15 +1785,9 @@ PassRefPtr<Widget> WebFrameLoaderClient::createJavaAppletWidget(const IntSize& s
         }
     }
 
-    ASSERT(view);
-    return adoptRef(new PluginWidget(view));
-
     END_BLOCK_OBJC_EXCEPTIONS;
-    
-    return adoptRef(new PluginWidget);
-#else
-    return 0;
 #endif // ENABLE(JAVA_BRIDGE)
+    return 0;
 }
 
 #if ENABLE(PLUGIN_PROXY_FOR_VIDEO)

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list