void FullscreenElementStack::webkitCancelFullScreen() { // The Mozilla "cancelFullScreen()" API behaves like the W3C "fully exit fullscreen" behavior, which // is defined as: // "To fully exit fullscreen act as if the exitFullscreen() method was invoked on the top-level browsing // context's document and subsequently empty that document's fullscreen element stack." if (!fullscreenElementFrom(document()->topDocument())) return; // To achieve that aim, remove all the elements from the top document's stack except for the first before // calling webkitExitFullscreen(): Vector<RefPtr<Element> > replacementFullscreenElementStack; replacementFullscreenElementStack.append(fullscreenElementFrom(document()->topDocument())); FullscreenElementStack* topFullscreenElementStack = from(document()->topDocument()); topFullscreenElementStack->m_fullScreenElementStack.swap(replacementFullscreenElementStack); topFullscreenElementStack->webkitExitFullscreen(); }
void FullscreenController::willExitFullScreen() { if (!m_fullScreenFrame) return; if (Document* doc = m_fullScreenFrame->document()) { FullscreenElementStack* fullscreen = FullscreenElementStack::fromIfExists(doc); if (!fullscreen) return; if (fullscreen->isFullScreen(doc)) { // When the client exits from full screen we have to call webkitCancelFullScreen to // notify the document. While doing that, suppress notifications back to the client. m_isCancelingFullScreen = true; fullscreen->webkitCancelFullScreen(); m_isCancelingFullScreen = false; fullscreen->webkitWillExitFullScreenForElement(0); } } }
void FullscreenController::willExitFullScreen() { if (!m_fullScreenFrame) return; if (Document* doc = m_fullScreenFrame->document()) { FullscreenElementStack* fullscreen = FullscreenElementStack::fromIfExists(*doc); if (!fullscreen) return; if (fullscreen->isFullScreen(*doc)) { // When the client exits from full screen we have to call webkitCancelFullScreen to // notify the document. While doing that, suppress notifications back to the client. m_isCancelingFullScreen = true; fullscreen->webkitCancelFullScreen(); m_isCancelingFullScreen = false; fullscreen->webkitWillExitFullScreenForElement(0); if (RuntimeEnabledFeatures::overlayFullscreenVideoEnabled() && m_webViewImpl->layerTreeView()) m_webViewImpl->layerTreeView()->setHasTransparentBackground(m_webViewImpl->isTransparent()); } } }