Index: third_party/WebKit/Source/web/FullscreenController.cpp |
diff --git a/third_party/WebKit/Source/web/FullscreenController.cpp b/third_party/WebKit/Source/web/FullscreenController.cpp |
index 4380a01fb2d69c41051ae38c536576db7c821aac..e44c0c777feff6085fcfb5d4f594d7f93b69936c 100644 |
--- a/third_party/WebKit/Source/web/FullscreenController.cpp |
+++ b/third_party/WebKit/Source/web/FullscreenController.cpp |
@@ -152,6 +152,9 @@ void FullscreenController::enterFullscreen(LocalFrame& frame) { |
? m_webViewImpl->mainFrame()->getScrollOffset() |
: WebSize(); |
m_initialVisualViewportOffset = m_webViewImpl->visualViewportOffset(); |
+ m_initialBackgroundColorOverrideEnabled = |
+ m_webViewImpl->backgroundColorOverrideEnabled(); |
+ m_initialBackgroundColorOverride = m_webViewImpl->backgroundColorOverride(); |
} |
// If already entering fullscreen, just wait. |
@@ -182,6 +185,10 @@ void FullscreenController::fullscreenElementChanged(Element* fromElement, |
Element* toElement) { |
DCHECK_NE(fromElement, toElement); |
+ // We only override the WebView's background color for overlay fullscreen |
+ // video elements, so have to restore the override when the element changes. |
+ restoreBackgroundColorOverride(); |
+ |
if (toElement) { |
DCHECK(Fullscreen::isCurrentFullScreenElement(*toElement)); |
@@ -191,10 +198,8 @@ void FullscreenController::fullscreenElementChanged(Element* fromElement, |
// If the video uses overlay fullscreen mode, make the background |
// transparent. |
- if (videoElement.usesOverlayFullscreenVideo() && |
- m_webViewImpl->layerTreeView()) { |
- m_webViewImpl->layerTreeView()->setHasTransparentBackground(true); |
- } |
+ if (videoElement.usesOverlayFullscreenVideo()) |
+ m_webViewImpl->setBackgroundColorOverride(Color::transparent); |
} |
} |
@@ -202,18 +207,26 @@ void FullscreenController::fullscreenElementChanged(Element* fromElement, |
DCHECK(!Fullscreen::isCurrentFullScreenElement(*fromElement)); |
if (isHTMLVideoElement(*fromElement)) { |
- // If the video used overlay fullscreen mode, restore the transparency. |
- if (m_webViewImpl->layerTreeView()) { |
- m_webViewImpl->layerTreeView()->setHasTransparentBackground( |
- m_webViewImpl->isTransparent()); |
- } |
- |
HTMLVideoElement& videoElement = toHTMLVideoElement(*fromElement); |
videoElement.didExitFullscreen(); |
} |
} |
} |
+void FullscreenController::restoreBackgroundColorOverride() { |
+ if (m_webViewImpl->backgroundColorOverrideEnabled() != |
+ m_initialBackgroundColorOverrideEnabled || |
+ m_webViewImpl->backgroundColorOverride() != |
+ m_initialBackgroundColorOverride) { |
+ if (m_initialBackgroundColorOverrideEnabled) { |
+ m_webViewImpl->setBackgroundColorOverride( |
+ m_initialBackgroundColorOverride); |
+ } else { |
+ m_webViewImpl->clearBackgroundColorOverride(); |
+ } |
+ } |
+} |
+ |
void FullscreenController::updateSize() { |
DCHECK(m_webViewImpl->page()); |
@@ -245,6 +258,8 @@ void FullscreenController::didUpdateLayout() { |
if (m_webViewImpl->mainFrame()->isWebLocalFrame()) |
m_webViewImpl->mainFrame()->setScrollOffset(WebSize(m_initialScrollOffset)); |
m_webViewImpl->setVisualViewportOffset(m_initialVisualViewportOffset); |
+ // Background color override was already restored when |
+ // fullscreenElementChanged([..], nullptr) was called while exiting. |
m_state = State::Initial; |
} |