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

Unified Diff: Source/core/frame/FrameView.cpp

Issue 1300393003: Attempt scroll restoration anytime viewport size changes (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: s/page()->frameHost()/m_frame->host()/ Created 5 years, 4 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 | « Source/core/frame/FrameView.h ('k') | Source/core/loader/FrameLoader.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/frame/FrameView.cpp
diff --git a/Source/core/frame/FrameView.cpp b/Source/core/frame/FrameView.cpp
index c9c429ac81677e8f703528ccb03a89e71f526610..74cecf759161949f039851950b00e02bc0455721 100644
--- a/Source/core/frame/FrameView.cpp
+++ b/Source/core/frame/FrameView.cpp
@@ -406,8 +406,11 @@ void FrameView::setFrameRect(const IntRect& newRect)
viewportSizeChanged(newRect.width() != oldRect.width(), newRect.height() != oldRect.height());
- if (oldRect.size() != newRect.size() && m_frame->isMainFrame())
- page()->frameHost().visualViewport().mainFrameDidChangeSize();
+ if (oldRect.size() != newRect.size()) {
+ if (m_frame->isMainFrame())
+ m_frame->host()->visualViewport().mainFrameDidChangeSize();
+ frame().loader().restoreScrollPositionAndViewState();
+ }
}
Page* FrameView::page() const
@@ -509,20 +512,7 @@ void FrameView::setContentsSize(const IntSize& size)
updateScrollableAreaSet();
page->chromeClient().contentsSizeChanged(m_frame.get(), size);
-}
-
-IntPoint FrameView::clampOffsetAtScale(const IntPoint& offset, float scale) const
-{
- IntPoint maxScrollExtent(contentsSize().width() - scrollOrigin().x(), contentsSize().height() - scrollOrigin().y());
- FloatSize scaledSize = visibleContentSize();
- if (scale)
- scaledSize.scale(1 / scale);
-
- IntPoint clampedOffset = offset;
- clampedOffset = clampedOffset.shrunkTo(maxScrollExtent - expandedIntSize(scaledSize));
- clampedOffset = clampedOffset.expandedTo(-scrollOrigin());
-
- return clampedOffset;
+ frame().loader().restoreScrollPositionAndViewState();
}
void FrameView::adjustViewSize()
@@ -790,7 +780,7 @@ void FrameView::performPreLayoutTasks()
lifecycle().advanceTo(DocumentLifecycle::StyleClean);
if (m_frame->isMainFrame() && !m_viewportScrollableArea) {
- ScrollableArea& visualViewport = page()->frameHost().visualViewport();
+ ScrollableArea& visualViewport = m_frame->host()->visualViewport();
ScrollableArea* layoutViewport = layoutViewportScrollableArea();
bool invertScrollOrder = m_frame->settings()->invertViewportScrollOrder();
ASSERT(layoutViewport);
@@ -2195,7 +2185,7 @@ IntSize FrameView::inputEventsOffsetForEmulation() const
float FrameView::inputEventsScaleFactor() const
{
- float pageScale = m_frame->page()->frameHost().visualViewport().scale();
+ float pageScale = m_frame->host()->visualViewport().scale();
return pageScale * m_inputEventsScaleFactorForEmulation;
}
@@ -3552,14 +3542,14 @@ FloatPoint FrameView::rootFrameToContents(const FloatPoint& windowPoint) const
IntRect FrameView::viewportToContents(const IntRect& rectInViewport) const
{
- IntRect rectInRootFrame = page()->frameHost().visualViewport().viewportToRootFrame(rectInViewport);
+ IntRect rectInRootFrame = m_frame->host()->visualViewport().viewportToRootFrame(rectInViewport);
IntRect frameRect = convertFromContainingWindow(rectInRootFrame);
return frameToContents(frameRect);
}
IntPoint FrameView::viewportToContents(const IntPoint& pointInViewport) const
{
- IntPoint pointInRootFrame = page()->frameHost().visualViewport().viewportToRootFrame(pointInViewport);
+ IntPoint pointInRootFrame = m_frame->host()->visualViewport().viewportToRootFrame(pointInViewport);
IntPoint pointInFrame = convertFromContainingWindow(pointInRootFrame);
return frameToContents(pointInFrame);
}
@@ -3568,14 +3558,14 @@ IntRect FrameView::contentsToViewport(const IntRect& rectInContents) const
{
IntRect rectInFrame = contentsToFrame(rectInContents);
IntRect rectInRootFrame = convertToContainingWindow(rectInFrame);
- return page()->frameHost().visualViewport().rootFrameToViewport(rectInRootFrame);
+ return m_frame->host()->visualViewport().rootFrameToViewport(rectInRootFrame);
}
IntPoint FrameView::contentsToViewport(const IntPoint& pointInContents) const
{
IntPoint pointInFrame = contentsToFrame(pointInContents);
IntPoint pointInRootFrame = convertToContainingWindow(pointInFrame);
- return page()->frameHost().visualViewport().rootFrameToViewport(pointInRootFrame);
+ return m_frame->host()->visualViewport().rootFrameToViewport(pointInRootFrame);
}
IntRect FrameView::contentsToScreen(const IntRect& rect) const
@@ -3590,12 +3580,12 @@ IntRect FrameView::soonToBeRemovedContentsToUnscaledViewport(const IntRect& rect
{
IntRect rectInFrame = contentsToFrame(rectInContents);
IntRect rectInRootFrame = convertToContainingWindow(rectInFrame);
- return enclosingIntRect(page()->frameHost().visualViewport().mainViewToViewportCSSPixels(rectInRootFrame));
+ return enclosingIntRect(m_frame->host()->visualViewport().mainViewToViewportCSSPixels(rectInRootFrame));
}
IntPoint FrameView::soonToBeRemovedUnscaledViewportToContents(const IntPoint& pointInViewport) const
{
- IntPoint pointInRootFrame = flooredIntPoint(page()->frameHost().visualViewport().viewportCSSPixelsToRootFrame(pointInViewport));
+ IntPoint pointInRootFrame = flooredIntPoint(m_frame->host()->visualViewport().viewportCSSPixelsToRootFrame(pointInViewport));
IntPoint pointInThisFrame = convertFromContainingWindow(pointInRootFrame);
return frameToContents(pointInThisFrame);
}
« no previous file with comments | « Source/core/frame/FrameView.h ('k') | Source/core/loader/FrameLoader.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698