From cfd86b747d32ac22246a1aa908eaa720c63a88c1 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Wed, 7 Nov 2012 11:22:47 +0100 Subject: Imported WebKit commit 20271caf2e2c016d5cef40184cddeefeac4f1876 (http://svn.webkit.org/repository/webkit/trunk@133733) New snapshot that contains all previous fixes as well as build fix for latest QtMultimedia API changes. --- Source/WebCore/rendering/RenderEmbeddedObject.cpp | 35 +++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'Source/WebCore/rendering/RenderEmbeddedObject.cpp') diff --git a/Source/WebCore/rendering/RenderEmbeddedObject.cpp b/Source/WebCore/rendering/RenderEmbeddedObject.cpp index 1e12c7c90..e964855d7 100644 --- a/Source/WebCore/rendering/RenderEmbeddedObject.cpp +++ b/Source/WebCore/rendering/RenderEmbeddedObject.cpp @@ -53,6 +53,10 @@ #include "Text.h" #include "TextRun.h" +#if ENABLE(PLUGIN_PROXY_FOR_VIDEO) +#include "HTMLMediaElement.h" +#endif + namespace WebCore { using namespace HTMLNames; @@ -113,6 +117,8 @@ static String unavailablePluginReplacementText(RenderEmbeddedObject::PluginUnava return blockedPluginByContentSecurityPolicyText(); case RenderEmbeddedObject::InsecurePluginVersion: return insecurePluginVersionText(); + case RenderEmbeddedObject::PluginInactive: + return inactivePluginText(); } ASSERT_NOT_REACHED(); @@ -231,6 +237,10 @@ void RenderEmbeddedObject::layout() StackStats::LayoutCheckPoint layoutCheckPoint; ASSERT(needsLayout()); +#if ENABLE(PLUGIN_PROXY_FOR_VIDEO) + LayoutSize oldSize = contentBoxRect().size(); +#endif + updateLogicalWidth(); updateLogicalHeight(); @@ -245,6 +255,31 @@ void RenderEmbeddedObject::layout() frameView()->addWidgetToUpdate(this); setNeedsLayout(false); + +#if ENABLE(PLUGIN_PROXY_FOR_VIDEO) + // This code copied from RenderMedia::layout(). + RenderBox* controlsRenderer = toRenderBox(m_children.firstChild()); + if (!controlsRenderer) + return; + + LayoutSize newSize = contentBoxRect().size(); + if (newSize == oldSize && !controlsRenderer->needsLayout()) + return; + + // When calling layout() on a child node, a parent must either push a LayoutStateMaintainter, or + // instantiate LayoutStateDisabler. Since using a LayoutStateMaintainer is slightly more efficient, + // and this method will be called many times per second during playback, use a LayoutStateMaintainer: + LayoutStateMaintainer statePusher(view(), this, locationOffset(), hasTransform() || hasReflection() || style()->isFlippedBlocksWritingMode()); + + controlsRenderer->setLocation(LayoutPoint(borderLeft(), borderTop()) + LayoutSize(paddingLeft(), paddingTop())); + controlsRenderer->style()->setHeight(Length(newSize.height(), Fixed)); + controlsRenderer->style()->setWidth(Length(newSize.width(), Fixed)); + controlsRenderer->setNeedsLayout(true, MarkOnlyThis); + controlsRenderer->layout(); + setChildNeedsLayout(false); + + statePusher.pop(); +#endif } void RenderEmbeddedObject::viewCleared() -- cgit v1.2.1