Chromium Code Reviews| 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(); |
|
chrishtr
2017/03/28 19:45:56
Are the code changes in this file tested by a layo
Eric Seckler
2017/03/29 10:50:18
Yeah, there's a unit test [1], which fails if we d
|
| + |
| 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; |
| } |