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

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: Accidentally made will_cause_resize always false in previous cleanup. Fixed Created 4 years, 11 months 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
« no previous file with comments | « third_party/WebKit/Source/web/FullscreenController.h ('k') | ui/views/controls/webview/webview.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 c48ff7694afb6ed595d112f7e1392d125b381b9f..0f0e556c6fe9e893d32bda887e08dc3c89aac45a 100644
--- a/third_party/WebKit/Source/web/FullscreenController.cpp
+++ b/third_party/WebKit/Source/web/FullscreenController.cpp
@@ -53,6 +53,7 @@ PassOwnPtrWillBeRawPtr<FullscreenController> FullscreenController::create(WebVie
FullscreenController::FullscreenController(WebViewImpl* webViewImpl)
: m_webViewImpl(webViewImpl)
+ , m_haveEnteredFullscreen(false)
, m_exitFullscreenPageScaleFactor(0)
, m_isCancelingFullScreen(false)
{
@@ -70,15 +71,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());
@@ -117,13 +115,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);
@@ -149,6 +146,15 @@ void FullscreenController::enterFullScreenForElement(Element* element)
return;
}
+ // We need to store these values here rather than didEnterFullScreen since
+ // by the time the latter 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()) {
« no previous file with comments | « third_party/WebKit/Source/web/FullscreenController.h ('k') | ui/views/controls/webview/webview.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698