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

Side by Side 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 unified diff | Download patch
« no previous file with comments | « Source/core/frame/FrameView.h ('k') | Source/core/loader/FrameLoader.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> 2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org>
3 * 1999 Lars Knoll <knoll@kde.org> 3 * 1999 Lars Knoll <knoll@kde.org>
4 * 1999 Antti Koivisto <koivisto@kde.org> 4 * 1999 Antti Koivisto <koivisto@kde.org>
5 * 2000 Dirk Mueller <mueller@kde.org> 5 * 2000 Dirk Mueller <mueller@kde.org>
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
7 * (C) 2006 Graham Dennis (graham.dennis@gmail.com) 7 * (C) 2006 Graham Dennis (graham.dennis@gmail.com)
8 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) 8 * (C) 2006 Alexey Proskuryakov (ap@nypop.com)
9 * Copyright (C) 2009 Google Inc. All rights reserved. 9 * Copyright (C) 2009 Google Inc. All rights reserved.
10 * 10 *
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after
399 399
400 updateScrollableAreaSet(); 400 updateScrollableAreaSet();
401 401
402 if (LayoutView* layoutView = this->layoutView()) { 402 if (LayoutView* layoutView = this->layoutView()) {
403 if (layoutView->usesCompositing()) 403 if (layoutView->usesCompositing())
404 layoutView->compositor()->frameViewDidChangeSize(); 404 layoutView->compositor()->frameViewDidChangeSize();
405 } 405 }
406 406
407 viewportSizeChanged(newRect.width() != oldRect.width(), newRect.height() != oldRect.height()); 407 viewportSizeChanged(newRect.width() != oldRect.width(), newRect.height() != oldRect.height());
408 408
409 if (oldRect.size() != newRect.size() && m_frame->isMainFrame()) 409 if (oldRect.size() != newRect.size()) {
410 page()->frameHost().visualViewport().mainFrameDidChangeSize(); 410 if (m_frame->isMainFrame())
411 m_frame->host()->visualViewport().mainFrameDidChangeSize();
412 frame().loader().restoreScrollPositionAndViewState();
413 }
411 } 414 }
412 415
413 Page* FrameView::page() const 416 Page* FrameView::page() const
414 { 417 {
415 return frame().page(); 418 return frame().page();
416 } 419 }
417 420
418 LayoutView* FrameView::layoutView() const 421 LayoutView* FrameView::layoutView() const
419 { 422 {
420 return frame().contentLayoutObject(); 423 return frame().contentLayoutObject();
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 updateScrollbars(scrollOffsetDouble()); 505 updateScrollbars(scrollOffsetDouble());
503 ScrollableArea::contentsResized(); 506 ScrollableArea::contentsResized();
504 507
505 Page* page = frame().page(); 508 Page* page = frame().page();
506 if (!page) 509 if (!page)
507 return; 510 return;
508 511
509 updateScrollableAreaSet(); 512 updateScrollableAreaSet();
510 513
511 page->chromeClient().contentsSizeChanged(m_frame.get(), size); 514 page->chromeClient().contentsSizeChanged(m_frame.get(), size);
512 } 515 frame().loader().restoreScrollPositionAndViewState();
513
514 IntPoint FrameView::clampOffsetAtScale(const IntPoint& offset, float scale) cons t
515 {
516 IntPoint maxScrollExtent(contentsSize().width() - scrollOrigin().x(), conten tsSize().height() - scrollOrigin().y());
517 FloatSize scaledSize = visibleContentSize();
518 if (scale)
519 scaledSize.scale(1 / scale);
520
521 IntPoint clampedOffset = offset;
522 clampedOffset = clampedOffset.shrunkTo(maxScrollExtent - expandedIntSize(sca ledSize));
523 clampedOffset = clampedOffset.expandedTo(-scrollOrigin());
524
525 return clampedOffset;
526 } 516 }
527 517
528 void FrameView::adjustViewSize() 518 void FrameView::adjustViewSize()
529 { 519 {
530 LayoutView* layoutView = this->layoutView(); 520 LayoutView* layoutView = this->layoutView();
531 if (!layoutView) 521 if (!layoutView)
532 return; 522 return;
533 523
534 ASSERT(m_frame->view() == this); 524 ASSERT(m_frame->view() == this);
535 525
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
783 document->styleResolverChanged(); 773 document->styleResolverChanged();
784 document->mediaQueryAffectingValueChanged(); 774 document->mediaQueryAffectingValueChanged();
785 } else if (wasResized) { 775 } else if (wasResized) {
786 document->evaluateMediaQueryList(); 776 document->evaluateMediaQueryList();
787 } 777 }
788 778
789 document->updateLayoutTreeIfNeeded(); 779 document->updateLayoutTreeIfNeeded();
790 lifecycle().advanceTo(DocumentLifecycle::StyleClean); 780 lifecycle().advanceTo(DocumentLifecycle::StyleClean);
791 781
792 if (m_frame->isMainFrame() && !m_viewportScrollableArea) { 782 if (m_frame->isMainFrame() && !m_viewportScrollableArea) {
793 ScrollableArea& visualViewport = page()->frameHost().visualViewport(); 783 ScrollableArea& visualViewport = m_frame->host()->visualViewport();
794 ScrollableArea* layoutViewport = layoutViewportScrollableArea(); 784 ScrollableArea* layoutViewport = layoutViewportScrollableArea();
795 bool invertScrollOrder = m_frame->settings()->invertViewportScrollOrder( ); 785 bool invertScrollOrder = m_frame->settings()->invertViewportScrollOrder( );
796 ASSERT(layoutViewport); 786 ASSERT(layoutViewport);
797 m_viewportScrollableArea = RootFrameViewport::create(visualViewport, *la youtViewport, invertScrollOrder); 787 m_viewportScrollableArea = RootFrameViewport::create(visualViewport, *la youtViewport, invertScrollOrder);
798 } 788 }
799 } 789 }
800 790
801 static inline void layoutFromRootObject(LayoutObject& root) 791 static inline void layoutFromRootObject(LayoutObject& root)
802 { 792 {
803 LayoutState layoutState(root); 793 LayoutState layoutState(root);
(...skipping 1384 matching lines...) Expand 10 before | Expand all | Expand 10 after
2188 m_inputEventsScaleFactorForEmulation = contentScaleFactor; 2178 m_inputEventsScaleFactorForEmulation = contentScaleFactor;
2189 } 2179 }
2190 2180
2191 IntSize FrameView::inputEventsOffsetForEmulation() const 2181 IntSize FrameView::inputEventsOffsetForEmulation() const
2192 { 2182 {
2193 return m_inputEventsOffsetForEmulation; 2183 return m_inputEventsOffsetForEmulation;
2194 } 2184 }
2195 2185
2196 float FrameView::inputEventsScaleFactor() const 2186 float FrameView::inputEventsScaleFactor() const
2197 { 2187 {
2198 float pageScale = m_frame->page()->frameHost().visualViewport().scale(); 2188 float pageScale = m_frame->host()->visualViewport().scale();
2199 return pageScale * m_inputEventsScaleFactorForEmulation; 2189 return pageScale * m_inputEventsScaleFactorForEmulation;
2200 } 2190 }
2201 2191
2202 bool FrameView::scrollbarsCanBeActive() const 2192 bool FrameView::scrollbarsCanBeActive() const
2203 { 2193 {
2204 if (m_frame->view() != this) 2194 if (m_frame->view() != this)
2205 return false; 2195 return false;
2206 2196
2207 return !!m_frame->document(); 2197 return !!m_frame->document();
2208 } 2198 }
(...skipping 1336 matching lines...) Expand 10 before | Expand all | Expand 10 after
3545 } 3535 }
3546 3536
3547 FloatPoint FrameView::rootFrameToContents(const FloatPoint& windowPoint) const 3537 FloatPoint FrameView::rootFrameToContents(const FloatPoint& windowPoint) const
3548 { 3538 {
3549 FloatPoint framePoint = convertFromContainingWindow(windowPoint); 3539 FloatPoint framePoint = convertFromContainingWindow(windowPoint);
3550 return frameToContents(framePoint); 3540 return frameToContents(framePoint);
3551 } 3541 }
3552 3542
3553 IntRect FrameView::viewportToContents(const IntRect& rectInViewport) const 3543 IntRect FrameView::viewportToContents(const IntRect& rectInViewport) const
3554 { 3544 {
3555 IntRect rectInRootFrame = page()->frameHost().visualViewport().viewportToRoo tFrame(rectInViewport); 3545 IntRect rectInRootFrame = m_frame->host()->visualViewport().viewportToRootFr ame(rectInViewport);
3556 IntRect frameRect = convertFromContainingWindow(rectInRootFrame); 3546 IntRect frameRect = convertFromContainingWindow(rectInRootFrame);
3557 return frameToContents(frameRect); 3547 return frameToContents(frameRect);
3558 } 3548 }
3559 3549
3560 IntPoint FrameView::viewportToContents(const IntPoint& pointInViewport) const 3550 IntPoint FrameView::viewportToContents(const IntPoint& pointInViewport) const
3561 { 3551 {
3562 IntPoint pointInRootFrame = page()->frameHost().visualViewport().viewportToR ootFrame(pointInViewport); 3552 IntPoint pointInRootFrame = m_frame->host()->visualViewport().viewportToRoot Frame(pointInViewport);
3563 IntPoint pointInFrame = convertFromContainingWindow(pointInRootFrame); 3553 IntPoint pointInFrame = convertFromContainingWindow(pointInRootFrame);
3564 return frameToContents(pointInFrame); 3554 return frameToContents(pointInFrame);
3565 } 3555 }
3566 3556
3567 IntRect FrameView::contentsToViewport(const IntRect& rectInContents) const 3557 IntRect FrameView::contentsToViewport(const IntRect& rectInContents) const
3568 { 3558 {
3569 IntRect rectInFrame = contentsToFrame(rectInContents); 3559 IntRect rectInFrame = contentsToFrame(rectInContents);
3570 IntRect rectInRootFrame = convertToContainingWindow(rectInFrame); 3560 IntRect rectInRootFrame = convertToContainingWindow(rectInFrame);
3571 return page()->frameHost().visualViewport().rootFrameToViewport(rectInRootFr ame); 3561 return m_frame->host()->visualViewport().rootFrameToViewport(rectInRootFrame );
3572 } 3562 }
3573 3563
3574 IntPoint FrameView::contentsToViewport(const IntPoint& pointInContents) const 3564 IntPoint FrameView::contentsToViewport(const IntPoint& pointInContents) const
3575 { 3565 {
3576 IntPoint pointInFrame = contentsToFrame(pointInContents); 3566 IntPoint pointInFrame = contentsToFrame(pointInContents);
3577 IntPoint pointInRootFrame = convertToContainingWindow(pointInFrame); 3567 IntPoint pointInRootFrame = convertToContainingWindow(pointInFrame);
3578 return page()->frameHost().visualViewport().rootFrameToViewport(pointInRootF rame); 3568 return m_frame->host()->visualViewport().rootFrameToViewport(pointInRootFram e);
3579 } 3569 }
3580 3570
3581 IntRect FrameView::contentsToScreen(const IntRect& rect) const 3571 IntRect FrameView::contentsToScreen(const IntRect& rect) const
3582 { 3572 {
3583 HostWindow* window = hostWindow(); 3573 HostWindow* window = hostWindow();
3584 if (!window) 3574 if (!window)
3585 return IntRect(); 3575 return IntRect();
3586 return window->viewportToScreen(contentsToViewport(rect)); 3576 return window->viewportToScreen(contentsToViewport(rect));
3587 } 3577 }
3588 3578
3589 IntRect FrameView::soonToBeRemovedContentsToUnscaledViewport(const IntRect& rect InContents) const 3579 IntRect FrameView::soonToBeRemovedContentsToUnscaledViewport(const IntRect& rect InContents) const
3590 { 3580 {
3591 IntRect rectInFrame = contentsToFrame(rectInContents); 3581 IntRect rectInFrame = contentsToFrame(rectInContents);
3592 IntRect rectInRootFrame = convertToContainingWindow(rectInFrame); 3582 IntRect rectInRootFrame = convertToContainingWindow(rectInFrame);
3593 return enclosingIntRect(page()->frameHost().visualViewport().mainViewToViewp ortCSSPixels(rectInRootFrame)); 3583 return enclosingIntRect(m_frame->host()->visualViewport().mainViewToViewport CSSPixels(rectInRootFrame));
3594 } 3584 }
3595 3585
3596 IntPoint FrameView::soonToBeRemovedUnscaledViewportToContents(const IntPoint& po intInViewport) const 3586 IntPoint FrameView::soonToBeRemovedUnscaledViewportToContents(const IntPoint& po intInViewport) const
3597 { 3587 {
3598 IntPoint pointInRootFrame = flooredIntPoint(page()->frameHost().visualViewpo rt().viewportCSSPixelsToRootFrame(pointInViewport)); 3588 IntPoint pointInRootFrame = flooredIntPoint(m_frame->host()->visualViewport( ).viewportCSSPixelsToRootFrame(pointInViewport));
3599 IntPoint pointInThisFrame = convertFromContainingWindow(pointInRootFrame); 3589 IntPoint pointInThisFrame = convertFromContainingWindow(pointInRootFrame);
3600 return frameToContents(pointInThisFrame); 3590 return frameToContents(pointInThisFrame);
3601 } 3591 }
3602 3592
3603 bool FrameView::containsScrollbarsAvoidingResizer() const 3593 bool FrameView::containsScrollbarsAvoidingResizer() const
3604 { 3594 {
3605 return !m_scrollbarsAvoidingResizer; 3595 return !m_scrollbarsAvoidingResizer;
3606 } 3596 }
3607 3597
3608 void FrameView::adjustScrollbarsAvoidingResizerCount(int overlapDelta) 3598 void FrameView::adjustScrollbarsAvoidingResizerCount(int overlapDelta)
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after
3978 3968
3979 if (!graphicsLayer) 3969 if (!graphicsLayer)
3980 return; 3970 return;
3981 3971
3982 DeprecatedPaintLayer::mapRectToPaintInvalidationBacking(localFrame->contentL ayoutObject(), paintInvalidationContainer, viewRect); 3972 DeprecatedPaintLayer::mapRectToPaintInvalidationBacking(localFrame->contentL ayoutObject(), paintInvalidationContainer, viewRect);
3983 3973
3984 graphicsLayerTimingRequests.add(graphicsLayer, Vector<std::pair<int64_t, Web Rect>>()).storedValue->value.append(std::make_pair(m_frame->frameID(), enclosing IntRect(viewRect))); 3974 graphicsLayerTimingRequests.add(graphicsLayer, Vector<std::pair<int64_t, Web Rect>>()).storedValue->value.append(std::make_pair(m_frame->frameID(), enclosing IntRect(viewRect)));
3985 } 3975 }
3986 3976
3987 } // namespace blink 3977 } // namespace blink
OLDNEW
« 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