| Index: Source/core/rendering/RenderLayerCompositor.cpp
|
| diff --git a/Source/core/rendering/RenderLayerCompositor.cpp b/Source/core/rendering/RenderLayerCompositor.cpp
|
| index c5e25a56d6742463a17fb08058b10d47813a941c..38427adab478b4de752938c037cf753b89ca671b 100644
|
| --- a/Source/core/rendering/RenderLayerCompositor.cpp
|
| +++ b/Source/core/rendering/RenderLayerCompositor.cpp
|
| @@ -29,6 +29,7 @@
|
|
|
| #include "CSSPropertyNames.h"
|
| #include "HTMLNames.h"
|
| +#include "RuntimeEnabledFeatures.h"
|
| #include "core/dom/NodeList.h"
|
| #include "core/html/HTMLCanvasElement.h"
|
| #include "core/html/HTMLIFrameElement.h"
|
| @@ -229,6 +230,7 @@ RenderLayerCompositor::RenderLayerCompositor(RenderView* renderView)
|
| , m_needsUpdateCompositingRequirementsState(false)
|
| , m_isTrackingRepaints(false)
|
| , m_rootLayerAttachment(RootLayerUnattached)
|
| + , m_currentFullscreenRenderer(0)
|
| #if !LOG_DISABLED
|
| , m_rootLayerUpdateCount(0)
|
| , m_obligateCompositedLayerCount(0)
|
| @@ -242,6 +244,7 @@ RenderLayerCompositor::RenderLayerCompositor(RenderView* renderView)
|
| RenderLayerCompositor::~RenderLayerCompositor()
|
| {
|
| ASSERT(m_rootLayerAttachment == RootLayerUnattached);
|
| + ASSERT(!m_currentFullscreenRenderer);
|
| }
|
|
|
| void RenderLayerCompositor::enableCompositingMode(bool enable /* = true */)
|
| @@ -446,6 +449,14 @@ void RenderLayerCompositor::updateCompositingLayers(CompositingUpdateType update
|
|
|
| // Host the document layer in the RenderView's root layer.
|
| if (isFullUpdate) {
|
| + if (RuntimeEnabledFeatures::overlayFullscreenVideoEnabled() && m_currentFullscreenRenderer && m_currentFullscreenRenderer->isMedia()) {
|
| + RenderLayerModelObject* renderer = toRenderLayerModelObject(m_currentFullscreenRenderer);
|
| + RenderLayerBacking* backing = renderer->backing();
|
| + if (backing) {
|
| + childList.clear();
|
| + childList.append(backing->graphicsLayer());
|
| + }
|
| + }
|
| // Even when childList is empty, don't drop out of compositing mode if there are
|
| // composited layers that we didn't hit in our traversal (e.g. because of visibility:hidden).
|
| if (childList.isEmpty() && !hasAnyAdditionalCompositedLayers(updateRoot))
|
| @@ -1853,6 +1864,9 @@ bool RenderLayerCompositor::requiresCompositingForTransform(RenderObject* render
|
|
|
| bool RenderLayerCompositor::requiresCompositingForVideo(RenderObject* renderer) const
|
| {
|
| + if (RuntimeEnabledFeatures::overlayFullscreenVideoEnabled() && renderer->isVideo() && renderer == m_currentFullscreenRenderer)
|
| + return true;
|
| +
|
| if (!(m_compositingTriggers & ChromeClient::VideoTrigger))
|
| return false;
|
|
|
| @@ -2752,4 +2766,21 @@ String RenderLayerCompositor::debugName(const GraphicsLayer* graphicsLayer)
|
| return name;
|
| }
|
|
|
| +void RenderLayerCompositor::setCurrentFullscreenRenderer(RenderObject* renderer)
|
| +{
|
| + if (renderer == m_currentFullscreenRenderer)
|
| + return;
|
| +#ifndef NDEBUG
|
| + if (m_currentFullscreenRenderer)
|
| + m_currentFullscreenRenderer->setIsCurrentFullscreen(false);
|
| +#endif
|
| + m_currentFullscreenRenderer = renderer;
|
| +#ifndef NDEBUG
|
| + if (m_currentFullscreenRenderer)
|
| + m_currentFullscreenRenderer->setIsCurrentFullscreen(true);
|
| +#endif
|
| + if (RuntimeEnabledFeatures::overlayFullscreenVideoEnabled() && (!renderer || renderer->isVideo()))
|
| + setCompositingLayersNeedRebuild(true);
|
| +}
|
| +
|
| } // namespace WebCore
|
|
|