Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1259)

Unified Diff: Source/core/rendering/RenderLayerCompositor.cpp

Issue 22454003: Support subtitles for native fullscreen video (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: add dangling pointer check Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698