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

Unified Diff: third_party/WebKit/Source/web/FullscreenController.cpp

Issue 1488653002: Fix scroll restoration when exiting fullscreen mode. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month 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: 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 1efda9e2b976de93c0f7c4bc4f1ae178c8d5e812..da1e25274920e5162db0ffb354eee3ddd9c864a4 100644
--- a/third_party/WebKit/Source/web/FullscreenController.cpp
+++ b/third_party/WebKit/Source/web/FullscreenController.cpp
@@ -54,6 +54,7 @@ PassOwnPtrWillBeRawPtr<FullscreenController> FullscreenController::create(WebVie
FullscreenController::FullscreenController(WebViewImpl* webViewImpl)
: m_webViewImpl(webViewImpl)
+ , m_haveEnteredFullscreen(false)
, m_exitFullscreenPageScaleFactor(0)
, m_isCancelingFullScreen(false)
{
@@ -71,15 +72,12 @@ void FullscreenController::didEnterFullScreen()
if (!m_fullScreenFrame)
return;
- if (!m_exitFullscreenPageScaleFactor) {
- m_exitFullscreenPageScaleFactor = m_webViewImpl->pageScaleFactor();
- m_exitFullscreenScrollOffset = m_webViewImpl->mainFrame()->scrollOffset();
- m_exitFullscreenVisualViewportOffset = m_webViewImpl->visualViewportOffset();
-
+ if (!m_haveEnteredFullscreen) {
updatePageScaleConstraints(false);
m_webViewImpl->setPageScaleFactor(1.0f);
m_webViewImpl->mainFrame()->setScrollOffset(WebSize());
m_webViewImpl->setVisualViewportOffset(FloatPoint());
+ m_haveEnteredFullscreen = true;
}
Fullscreen::from(document).didEnterFullScreenForElement(element.get());
@@ -118,13 +116,12 @@ void FullscreenController::didExitFullScreen()
if (isHTMLVideoElement(element) && m_webViewImpl->layerTreeView())
m_webViewImpl->layerTreeView()->setHasTransparentBackground(m_webViewImpl->isTransparent());
- if (m_exitFullscreenPageScaleFactor) {
+ if (m_haveEnteredFullscreen) {
updatePageScaleConstraints(true);
m_webViewImpl->setPageScaleFactor(m_exitFullscreenPageScaleFactor);
m_webViewImpl->mainFrame()->setScrollOffset(WebSize(m_exitFullscreenScrollOffset));
m_webViewImpl->setVisualViewportOffset(m_exitFullscreenVisualViewportOffset);
- m_exitFullscreenPageScaleFactor = 0;
- m_exitFullscreenScrollOffset = IntSize();
+ m_haveEnteredFullscreen = false;
}
fullscreen->didExitFullScreenForElement(0);
@@ -150,6 +147,14 @@ void FullscreenController::enterFullScreenForElement(Element* element)
return;
}
+ // We need to store these values here rather than didEnterFullScreen since by the time the latter
scheib 2015/12/01 00:30:18 Comments might as well wrap to 80 chars. (optional
bokan 2015/12/01 20:46:10 Done.
+ // is called, a Resize has already occured, clamping the scroll offset.
+ if (!m_haveEnteredFullscreen) {
+ m_exitFullscreenPageScaleFactor = m_webViewImpl->pageScaleFactor();
+ m_exitFullscreenScrollOffset = m_webViewImpl->mainFrame()->scrollOffset();
+ m_exitFullscreenVisualViewportOffset = m_webViewImpl->visualViewportOffset();
+ }
+
// We need to transition to fullscreen mode.
WebLocalFrameImpl* frame = WebLocalFrameImpl::fromFrame(element->document().frame());
if (frame && frame->client()) {

Powered by Google App Engine
This is Rietveld 408576698