| Index: Source/web/FullscreenController.cpp
|
| diff --git a/Source/web/FullscreenController.cpp b/Source/web/FullscreenController.cpp
|
| index f19822ed8af1d252161dd00de792fe763b9f5b48..acee2487fe291a2542e60c07d7ac52a8dcfbd037 100644
|
| --- a/Source/web/FullscreenController.cpp
|
| +++ b/Source/web/FullscreenController.cpp
|
| @@ -56,73 +56,40 @@ FullscreenController::FullscreenController(WebViewImpl* webViewImpl)
|
| {
|
| }
|
|
|
| -void FullscreenController::willEnterFullScreen()
|
| +void FullscreenController::didEnterFullScreen()
|
| {
|
| if (!m_provisionalFullScreenElement)
|
| return;
|
|
|
| - // Ensure that this element's document is still attached.
|
| - Document& doc = m_provisionalFullScreenElement->document();
|
| - if (doc.frame()) {
|
| - Fullscreen::from(doc).willEnterFullScreenForElement(m_provisionalFullScreenElement.get());
|
| - m_fullScreenFrame = doc.frame();
|
| - }
|
| - m_provisionalFullScreenElement.clear();
|
| -}
|
| + RefPtrWillBeRawPtr<Element> element = m_provisionalFullScreenElement.release();
|
| + Document& document = element->document();
|
| + m_fullScreenFrame = document.frame();
|
|
|
| -void FullscreenController::didEnterFullScreen()
|
| -{
|
| if (!m_fullScreenFrame)
|
| return;
|
|
|
| - if (Document* doc = m_fullScreenFrame->document()) {
|
| - if (Fullscreen::isFullScreen(*doc)) {
|
| - if (!m_exitFullscreenPageScaleFactor) {
|
| - m_exitFullscreenPageScaleFactor = m_webViewImpl->pageScaleFactor();
|
| - m_exitFullscreenScrollOffset = m_webViewImpl->mainFrame()->scrollOffset();
|
| - m_exitFullscreenPinchViewportOffset = m_webViewImpl->pinchViewportOffset();
|
| - m_webViewImpl->setPageScaleFactor(1.0f);
|
| - m_webViewImpl->setMainFrameScrollOffset(IntPoint());
|
| - m_webViewImpl->setPinchViewportOffset(FloatPoint());
|
| - }
|
| -
|
| - Fullscreen::from(*doc).didEnterFullScreenForElement(0);
|
| - if (RuntimeEnabledFeatures::overlayFullscreenVideoEnabled()) {
|
| - Element* element = Fullscreen::currentFullScreenElementFrom(*doc);
|
| - ASSERT(element);
|
| - if (isHTMLMediaElement(*element)) {
|
| - HTMLMediaElement* mediaElement = toHTMLMediaElement(element);
|
| - if (mediaElement->webMediaPlayer() && mediaElement->webMediaPlayer()->canEnterFullscreen()
|
| - // FIXME: There is no embedder-side handling in layout test mode.
|
| - && !LayoutTestSupport::isRunningLayoutTest()) {
|
| - mediaElement->webMediaPlayer()->enterFullscreen();
|
| - }
|
| - if (m_webViewImpl->layerTreeView())
|
| - m_webViewImpl->layerTreeView()->setHasTransparentBackground(true);
|
| - }
|
| - }
|
| - }
|
| + if (!m_exitFullscreenPageScaleFactor) {
|
| + m_exitFullscreenPageScaleFactor = m_webViewImpl->pageScaleFactor();
|
| + m_exitFullscreenScrollOffset = m_webViewImpl->mainFrame()->scrollOffset();
|
| + m_exitFullscreenPinchViewportOffset = m_webViewImpl->pinchViewportOffset();
|
| + m_webViewImpl->setPageScaleFactor(1.0f);
|
| + m_webViewImpl->setMainFrameScrollOffset(IntPoint());
|
| + m_webViewImpl->setPinchViewportOffset(FloatPoint());
|
| }
|
| -}
|
|
|
| -void FullscreenController::willExitFullScreen()
|
| -{
|
| - if (!m_fullScreenFrame)
|
| - return;
|
| + Fullscreen::from(document).didEnterFullScreenForElement(element.get());
|
| + ASSERT(Fullscreen::currentFullScreenElementFrom(document) == element);
|
|
|
| - if (Document* doc = m_fullScreenFrame->document()) {
|
| - Fullscreen* fullscreen = Fullscreen::fromIfExists(*doc);
|
| - if (!fullscreen)
|
| - return;
|
| - if (fullscreen->isFullScreen(*doc)) {
|
| - // When the client exits from full screen we have to call fullyExitFullscreen to notify
|
| - // the document. While doing that, suppress notifications back to the client.
|
| - m_isCancelingFullScreen = true;
|
| - Fullscreen::fullyExitFullscreen(*doc);
|
| - m_isCancelingFullScreen = false;
|
| - fullscreen->willExitFullScreenForElement(0);
|
| - if (RuntimeEnabledFeatures::overlayFullscreenVideoEnabled() && m_webViewImpl->layerTreeView())
|
| - m_webViewImpl->layerTreeView()->setHasTransparentBackground(m_webViewImpl->isTransparent());
|
| + if (RuntimeEnabledFeatures::overlayFullscreenVideoEnabled()) {
|
| + if (isHTMLMediaElement(element)) {
|
| + HTMLMediaElement* mediaElement = toHTMLMediaElement(element);
|
| + if (mediaElement->webMediaPlayer() && mediaElement->webMediaPlayer()->canEnterFullscreen()
|
| + // FIXME: There is no embedder-side handling in layout test mode.
|
| + && !LayoutTestSupport::isRunningLayoutTest()) {
|
| + mediaElement->webMediaPlayer()->enterFullscreen();
|
| + }
|
| + if (m_webViewImpl->layerTreeView())
|
| + m_webViewImpl->layerTreeView()->setHasTransparentBackground(true);
|
| }
|
| }
|
| }
|
| @@ -132,9 +99,18 @@ void FullscreenController::didExitFullScreen()
|
| if (!m_fullScreenFrame)
|
| return;
|
|
|
| - if (Document* doc = m_fullScreenFrame->document()) {
|
| - if (Fullscreen* fullscreen = Fullscreen::fromIfExists(*doc)) {
|
| + if (Document* document = m_fullScreenFrame->document()) {
|
| + if (Fullscreen* fullscreen = Fullscreen::fromIfExists(*document)) {
|
| if (fullscreen->webkitCurrentFullScreenElement()) {
|
| + // When the client exits from full screen we have to call fullyExitFullscreen to notify
|
| + // the document. While doing that, suppress notifications back to the client.
|
| + m_isCancelingFullScreen = true;
|
| + Fullscreen::fullyExitFullscreen(*document);
|
| + m_isCancelingFullScreen = false;
|
| +
|
| + if (RuntimeEnabledFeatures::overlayFullscreenVideoEnabled() && m_webViewImpl->layerTreeView())
|
| + m_webViewImpl->layerTreeView()->setHasTransparentBackground(m_webViewImpl->isTransparent());
|
| +
|
| if (m_exitFullscreenPageScaleFactor) {
|
| m_webViewImpl->setPageScaleFactor(m_exitFullscreenPageScaleFactor);
|
| m_webViewImpl->setMainFrameScrollOffset(IntPoint(m_exitFullscreenScrollOffset));
|
| @@ -162,7 +138,6 @@ void FullscreenController::enterFullScreenForElement(Element* element)
|
| // We are already in fullscreen mode.
|
| if (m_fullScreenFrame) {
|
| m_provisionalFullScreenElement = element;
|
| - willEnterFullScreen();
|
| didEnterFullScreen();
|
| return;
|
| }
|
|
|