Changeset 136129 in webkit


Ignore:
Timestamp:
Nov 29, 2012 7:00:49 AM (11 years ago)
Author:
allan.jensen@digia.com
Message:

Possible to resize out of bounds
https://bugs.webkit.org/show_bug.cgi?id=103521

Reviewed by Jocelyn Turcotte.

Enforce the viewportBounds after resize, and ensure a user fitted page remains
fit on viewport resize, but not on content growth.

  • UIProcess/API/qt/tests/qmltests/WebView/tst_resize.qml: Added.
  • UIProcess/PageViewportController.cpp:

(WebKit::PageViewportController::didChangeContentsSize):
(WebKit::PageViewportController::didChangeViewportAttributes):
(WebKit::PageViewportController::updateMinimumScaleToFit):

  • UIProcess/PageViewportController.h:

(PageViewportController):

Location:
trunk/Source/WebKit2
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r136126 r136129  
     12012-11-29  Allan Sandfeld Jensen  <allan.jensen@digia.com>
     2
     3        Possible to resize out of bounds
     4        https://bugs.webkit.org/show_bug.cgi?id=103521
     5
     6        Reviewed by Jocelyn Turcotte.
     7
     8        Enforce the viewportBounds after resize, and ensure a user fitted page remains
     9        fit on viewport resize, but not on content growth.
     10
     11        * UIProcess/API/qt/tests/qmltests/WebView/tst_resize.qml: Added.
     12        * UIProcess/PageViewportController.cpp:
     13        (WebKit::PageViewportController::didChangeContentsSize):
     14        (WebKit::PageViewportController::didChangeViewportAttributes):
     15        (WebKit::PageViewportController::updateMinimumScaleToFit):
     16        * UIProcess/PageViewportController.h:
     17        (PageViewportController):
     18
    1192012-11-29  Michael Brüning  <michael.bruning@digia.com>
    220
  • trunk/Source/WebKit2/UIProcess/PageViewportController.cpp

    r135864 r136129  
    112112    m_contentsSize = newSize;
    113113
    114     bool minimumScaleUpdated = updateMinimumScaleToFit();
     114    bool minimumScaleUpdated = updateMinimumScaleToFit(false);
    115115
    116116    if (m_initiallyFitToViewport) {
     
    233233        WebCore::restrictScaleFactorToInitialScaleIfNotUserScalable(m_rawAttributes);
    234234
    235     if (updateMinimumScaleToFit())
     235    if (updateMinimumScaleToFit(true))
    236236        m_client->didChangeViewportAttributes();
    237237
     
    278278}
    279279
    280 bool PageViewportController::updateMinimumScaleToFit()
     280bool PageViewportController::updateMinimumScaleToFit(bool userInitiatedUpdate)
    281281{
    282282    if (m_viewportSize.isEmpty() || m_contentsSize.isEmpty())
    283283        return false;
    284284
     285    bool currentlyScaledToFit = fuzzyCompare(m_effectiveScale, toViewportScale(m_minimumScaleToFit), 0.001);
     286
    285287    float minimumScale = WebCore::computeMinimumScaleFactorForContentContained(m_rawAttributes, WebCore::roundedIntSize(m_viewportSize), WebCore::roundedIntSize(m_contentsSize), devicePixelRatio());
    286288
     
    291293        m_minimumScaleToFit = minimumScale;
    292294
    293         if (!m_hadUserInteraction && !hasSuspendedContent())
    294             applyScaleAfterRenderingContents(toViewportScale(minimumScale));
     295        if (!hasSuspendedContent()) {
     296            if (!m_hadUserInteraction || (userInitiatedUpdate && currentlyScaledToFit))
     297                applyScaleAfterRenderingContents(toViewportScale(m_minimumScaleToFit));
     298            else {
     299                // Ensure the effective scale stays within bounds.
     300                float boundedScale = innerBoundedViewportScale(m_effectiveScale);
     301                if (!fuzzyCompare(boundedScale, m_effectiveScale, 0.001))
     302                    applyScaleAfterRenderingContents(boundedScale);
     303            }
     304        }
    295305
    296306        return true;
  • trunk/Source/WebKit2/UIProcess/PageViewportController.h

    r135669 r136129  
    8585    void applyScaleAfterRenderingContents(float scale);
    8686    void applyPositionAfterRenderingContents(const WebCore::FloatPoint& pos);
    87     bool updateMinimumScaleToFit();
     87    bool updateMinimumScaleToFit(bool userInitiatedUpdate);
    8888    WebCore::FloatSize viewportSizeInContentsCoordinates() const;
    8989
Note: See TracChangeset for help on using the changeset viewer.