Changeset 57277 in webkit


Ignore:
Timestamp:
Apr 8, 2010 7:38:12 AM (14 years ago)
Author:
tonikitoo@webkit.org
Message:

2010-04-01 Antonio Gomes <tonikitoo@webkit.org>

Reviewed by David Hyatt.

[Qt] REGRESSION:(r50665) QWebFrame::setScrollBarPolicy(Qt::Vertical,Qt::ScrollBarAlwaysOff) has no effect.
https://bugs.webkit.org/show_bug.cgi?id=29431

Test: fast/overflow/scrollbar-restored-and-then-locked.html

WebCore:

Patch introduces a lock scrollbars concept to ScrollView, as in WebDynamicScrollBarsView.mm/h
on WebKit/mac. It is needed because in QtWebKit, we have Api for setting both vertical and
horizontal scrollbars on/off/auto. When it is set to off, for example, it should remain
as such, unless unset.

For the locking concept, optional 'lock' parameters were added to setScrollbarModes,
setHorizontalScrollbarMode and setVerticalScrollbarMode methods of ScrollView. As these
are all optional, any previous code calling them do not need modification.

Two optional parameters were also added to Frame's createView method, for horizontal and vertical
lock state persistence cross page loads.

  • WebCore.base.exp:
  • page/Frame.cpp: (WebCore::Frame::createView):
  • platform/ScrollView.cpp: (WebCore::ScrollView::ScrollView): (WebCore::ScrollView::setScrollbarModes): (WebCore::ScrollView::setHorizontalScrollbarMode): (WebCore::ScrollView::setVerticalScrollbarMode):
  • platform/ScrollView.h: (WebCore::ScrollView::setHorizontalScrollbarLock): (WebCore::ScrollView::isHorizontalScrollbarLocked): (WebCore::ScrollView::setVerticalScrollbarLock): (WebCore::ScrollView::isVerticalScrollbarLocked): (WebCore::ScrollView::setScrollingModesLocked):

WebKit/qt:

Make use of the new lock parameter of set{Vertical,Horizontal}ScrollbarMode.

Always added a qt auto test for set scrollbar policy feature.

  • Api/qwebframe.cpp: (QWebFrame::setScrollBarPolicy):
  • tests/qwebframe/tst_qwebframe.cpp:
  • WebCoreSupport/FrameLoaderClientQt.cpp: (FrameLoaderClientQt::transitionToCommittedForNewPage):

WebKitTools:

Make possible to DRT to set scrollbar policies (on, off or auto).

  • DumpRenderTree/qt/LayoutTestControllerQt.cpp: (LayoutTestController::setScrollbarPolicy):
  • DumpRenderTree/qt/LayoutTestControllerQt.h:
  • QtLauncher/main.cpp: (LauncherWindow::toggleScrollbars): (LauncherWindow::createChrome):

LayoutTests:

  • fast/overflow/scrollbar-restored-and-then-locked-expected.txt: Added.
  • fast/overflow/scrollbar-restored-and-then-locked.html: Added.
Location:
trunk
Files:
2 added
19 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r57276 r57277  
     12010-04-01  Antonio Gomes  <tonikitoo@webkit.org>
     2
     3        Reviewed by David Hyatt.
     4
     5        [Qt] REGRESSION:(r50665) QWebFrame::setScrollBarPolicy(Qt::Vertical,Qt::ScrollBarAlwaysOff) has no effect.
     6        https://bugs.webkit.org/show_bug.cgi?id=29431
     7
     8        * fast/overflow/scrollbar-restored-and-then-locked-expected.txt: Added.
     9        * fast/overflow/scrollbar-restored-and-then-locked.html: Added.
     10
    1112010-04-08  Yury Semikhatsky  <yurys@chromium.org>
    212
  • trunk/LayoutTests/platform/gtk/Skipped

    r57023 r57277  
    58935893# https://bugs.webkit.org/show_bug.cgi?id=37034
    58945894http/tests/media/video-play-suspend.html
     5895
     5896# Need to add functionality to DumpRenderTree to handle scrollbar police changes
     5897fast/overflow/scrollbar-restored-and-then-locked.html
  • trunk/LayoutTests/platform/mac/Skipped

    r57192 r57277  
    152152# https://bugs.webkit.org/show_bug.cgi?id=36642
    153153fast/replaced/border-radius-clip.html
     154
     155# Need to add functionality to DumpRenderTree to handle scrollbar police changes
     156fast/overflow/scrollbar-restored-and-then-locked.html
  • trunk/LayoutTests/platform/win/Skipped

    r57023 r57277  
    823823# Need expectations. See https://bugs.webkit.org/show_bug.cgi?id=36461
    824824fast/repaint/overflow-scroll-body-appear.html
     825
     826# Need to add functionality to DumpRenderTree to handle scrollbar police changes
     827fast/overflow/scrollbar-restored-and-then-locked.html
  • trunk/WebCore/ChangeLog

    r57276 r57277  
     12010-04-01  Antonio Gomes  <tonikitoo@webkit.org>
     2
     3        Reviewed by David Hyatt.
     4
     5        [Qt] REGRESSION:(r50665) QWebFrame::setScrollBarPolicy(Qt::Vertical,Qt::ScrollBarAlwaysOff) has no effect.
     6        https://bugs.webkit.org/show_bug.cgi?id=29431
     7
     8        Test: fast/overflow/scrollbar-restored-and-then-locked.html
     9
     10        Patch introduces a lock scrollbars concept to ScrollView, as in WebDynamicScrollBarsView.mm/h
     11        on WebKit/mac. It is needed because in QtWebKit, we have Api for setting both vertical and
     12        horizontal scrollbars on/off/auto. When it is set to off, for example, it should remain
     13        as such, unless unset.
     14
     15        For the locking concept, optional 'lock' parameters were added to setScrollbarModes,
     16        setHorizontalScrollbarMode and setVerticalScrollbarMode methods of ScrollView. As these
     17        are all optional, any previous code calling them do not need modification.
     18
     19        Two optional parameters were also added to Frame's createView method, for horizontal and vertical
     20        lock state persistence cross page loads.
     21
     22        * page/Frame.cpp:
     23        (WebCore::Frame::createView):
     24        * platform/ScrollView.cpp:
     25        (WebCore::ScrollView::ScrollView):
     26        (WebCore::ScrollView::setScrollbarModes):
     27        (WebCore::ScrollView::setHorizontalScrollbarMode):
     28        (WebCore::ScrollView::setVerticalScrollbarMode):
     29        * platform/ScrollView.h:
     30        (WebCore::ScrollView::setHorizontalScrollbarLock):
     31        (WebCore::ScrollView::isHorizontalScrollbarLocked):
     32        (WebCore::ScrollView::setVerticalScrollbarLock):
     33        (WebCore::ScrollView::isVerticalScrollbarLocked):
     34        (WebCore::ScrollView::setScrollingModesLocked):
     35
    1362010-04-08  Yury Semikhatsky  <yurys@chromium.org>
    237
  • trunk/WebCore/WebCore.base.exp

    r57215 r57277  
    136136__ZN3JSC8Bindings8Instance16newRuntimeObjectEPNS_9ExecStateE
    137137__ZN7WebCore10MouseEventC1ERKNS_12AtomicStringEbbN3WTF10PassRefPtrINS_9DOMWindowEEEiiiiibbbbtNS5_INS_11EventTargetEEENS5_INS_9ClipboardEEEb
    138 __ZN7WebCore10ScrollView17setScrollbarModesENS_13ScrollbarModeES1_
    139138__ZN7WebCore10ScrollView20setCanHaveScrollbarsEb
    140139__ZN7WebCore10StringImpl11reverseFindEPS0_ib
     
    531530__ZN7WebCore5Cache13getStatisticsEv
    532531__ZN7WebCore5Cache13setCapacitiesEjjj
    533 __ZN7WebCore5Frame10createViewERKNS_7IntSizeERKNS_5ColorEbS3_bNS_13ScrollbarModeES7_
    534532__ZN7WebCore5Frame10findStringERKNS_6StringEbbbb
    535533__ZN7WebCore5Frame11shouldCloseEv
  • trunk/WebCore/page/Frame.cpp

    r57218 r57277  
    17811781                       const Color& backgroundColor, bool transparent,
    17821782                       const IntSize& fixedLayoutSize, bool useFixedLayout,
    1783                        ScrollbarMode horizontalScrollbarMode, ScrollbarMode verticalScrollbarMode)
     1783                       ScrollbarMode horizontalScrollbarMode, bool horizontalLock,
     1784                       ScrollbarMode verticalScrollbarMode, bool verticalLock)
    17841785{
    17851786    ASSERT(this);
     
    18011802        frameView = FrameView::create(this);
    18021803
    1803     frameView->setScrollbarModes(horizontalScrollbarMode, verticalScrollbarMode);
     1804    frameView->setScrollbarModes(horizontalScrollbarMode, verticalScrollbarMode, horizontalLock, verticalLock);
    18041805
    18051806    setView(frameView);
  • trunk/WebCore/page/Frame.h

    r56938 r57277  
    120120
    121121        void createView(const IntSize&, const Color&, bool, const IntSize &, bool,
    122                         ScrollbarMode = ScrollbarAuto, ScrollbarMode = ScrollbarAuto);
     122                        ScrollbarMode = ScrollbarAuto, bool horizontalLock = false,
     123                        ScrollbarMode = ScrollbarAuto, bool verticalLock = false);
    123124
    124125        void injectUserScripts(UserScriptInjectionTime);
  • trunk/WebCore/platform/ScrollView.cpp

    r57165 r57277  
    4343    : m_horizontalScrollbarMode(ScrollbarAuto)
    4444    , m_verticalScrollbarMode(ScrollbarAuto)
     45    , m_horizontalScrollbarLock(false)
     46    , m_verticalScrollbarLock(false)
    4547    , m_prohibitsScrolling(false)
    4648    , m_canBlitOnScroll(true)
     
    116118}
    117119
    118 void ScrollView::setScrollbarModes(ScrollbarMode horizontalMode, ScrollbarMode verticalMode)
    119 {
    120     if (horizontalMode == horizontalScrollbarMode() && verticalMode == verticalScrollbarMode())
    121         return;
    122     m_horizontalScrollbarMode = horizontalMode;
    123     m_verticalScrollbarMode = verticalMode;
     120void ScrollView::setScrollbarModes(ScrollbarMode horizontalMode, ScrollbarMode verticalMode,
     121                                   bool horizontalLock, bool verticalLock)
     122{
     123    bool needsUpdate = false;
     124
     125    if (horizontalMode != horizontalScrollbarMode() && !m_horizontalScrollbarLock) {
     126        m_horizontalScrollbarMode = horizontalMode;
     127        needsUpdate = true;
     128    }
     129
     130    if (verticalMode != verticalScrollbarMode() && !m_verticalScrollbarLock) {
     131        m_verticalScrollbarMode = verticalMode;
     132        needsUpdate = true;
     133    }
     134
     135    if (horizontalLock)
     136        setHorizontalScrollbarLock();
     137
     138    if (verticalLock)
     139        setVerticalScrollbarLock();
     140
     141    if (!needsUpdate)
     142        return;
     143
    124144    if (platformWidget())
    125145        platformSetScrollbarModes();
  • trunk/WebCore/platform/ScrollView.h

    r57165 r57277  
    8484    // Note that for platforms with native widgets, these modes are considered advisory.  In other words the underlying native
    8585    // widget may choose not to honor the requested modes.
    86     void setScrollbarModes(ScrollbarMode horizontalMode, ScrollbarMode verticalMode);
    87     void setHorizontalScrollbarMode(ScrollbarMode mode) { setScrollbarModes(mode, verticalScrollbarMode()); }
    88     void setVerticalScrollbarMode(ScrollbarMode mode) { setScrollbarModes(horizontalScrollbarMode(), mode); }
     86    void setScrollbarModes(ScrollbarMode horizontalMode, ScrollbarMode verticalMode, bool horizontalLock = false, bool verticalLock = false);
     87    void setHorizontalScrollbarMode(ScrollbarMode mode, bool lock = false) { setScrollbarModes(mode, verticalScrollbarMode(), lock, verticalScrollbarLock()); }
     88    void setVerticalScrollbarMode(ScrollbarMode mode, bool lock = false) { setScrollbarModes(horizontalScrollbarMode(), mode, horizontalScrollbarLock(), lock); };
    8989    void scrollbarModes(ScrollbarMode& horizontalMode, ScrollbarMode& verticalMode) const;
    9090    ScrollbarMode horizontalScrollbarMode() const { ScrollbarMode horizontal, vertical; scrollbarModes(horizontal, vertical); return horizontal; }
    9191    ScrollbarMode verticalScrollbarMode() const { ScrollbarMode horizontal, vertical; scrollbarModes(horizontal, vertical); return vertical; }
     92
     93    void setHorizontalScrollbarLock(bool lock = true) { m_horizontalScrollbarLock = lock; }
     94    bool horizontalScrollbarLock() const { return m_horizontalScrollbarLock; }
     95    void setVerticalScrollbarLock(bool lock = true) { m_verticalScrollbarLock = lock; }
     96    bool verticalScrollbarLock() const { return m_verticalScrollbarLock; }
     97
     98    void setScrollingModesLock(bool lock = true) { m_horizontalScrollbarLock = m_verticalScrollbarLock = lock; }
     99
    92100    virtual void setCanHaveScrollbars(bool);
    93101    bool canHaveScrollbars() const { return horizontalScrollbarMode() != ScrollbarAlwaysOff || verticalScrollbarMode() != ScrollbarAlwaysOff; }
     
    258266    ScrollbarMode m_horizontalScrollbarMode;
    259267    ScrollbarMode m_verticalScrollbarMode;
     268
     269    bool m_horizontalScrollbarLock;
     270    bool m_verticalScrollbarLock;
     271
    260272    bool m_prohibitsScrolling;
    261273
  • trunk/WebCore/platform/gtk/ScrollViewGtk.cpp

    r54620 r57277  
    169169}
    170170
    171 void ScrollView::setScrollbarModes(ScrollbarMode horizontalMode, ScrollbarMode verticalMode)
     171void ScrollView::setScrollbarModes(ScrollbarMode horizontalMode, ScrollbarMode verticalMode, bool, bool)
    172172{
    173173    if (horizontalMode == m_horizontalScrollbarMode && verticalMode == m_verticalScrollbarMode)
  • trunk/WebKit/qt/Api/qwebframe.cpp

    r57266 r57277  
    10481048        d->horizontalScrollBarPolicy = policy;
    10491049        if (d->frame->view()) {
    1050             d->frame->view()->setHorizontalScrollbarMode((ScrollbarMode)policy);
     1050            d->frame->view()->setHorizontalScrollbarMode((ScrollbarMode)policy, policy != Qt::ScrollBarAsNeeded /* lock */);
    10511051            d->frame->view()->updateCanHaveScrollbars();
    10521052        }
     
    10541054        d->verticalScrollBarPolicy = policy;
    10551055        if (d->frame->view()) {
    1056             d->frame->view()->setVerticalScrollbarMode((ScrollbarMode)policy);
     1056            d->frame->view()->setVerticalScrollbarMode((ScrollbarMode)policy, policy != Qt::ScrollBarAsNeeded /* lock */);
    10571057            d->frame->view()->updateCanHaveScrollbars();
    10581058        }
  • trunk/WebKit/qt/ChangeLog

    r57270 r57277  
     12010-04-01  Antonio Gomes  <tonikitoo@webkit.org>
     2
     3        Reviewed by David Hyatt.
     4
     5        [Qt] REGRESSION:(r50665) QWebFrame::setScrollBarPolicy(Qt::Vertical,Qt::ScrollBarAlwaysOff) has no effect.
     6        https://bugs.webkit.org/show_bug.cgi?id=29431
     7
     8        Make use of the new lock parameter of set{Vertical,Horizontal}ScrollbarMode.
     9
     10        Always added a qt auto test for set scrollbar policy feature.
     11
     12        * Api/qwebframe.cpp:
     13        (QWebFrame::setScrollBarPolicy):
     14        * tests/qwebframe/tst_qwebframe.cpp:
     15        * WebCoreSupport/FrameLoaderClientQt.cpp:
     16        (FrameLoaderClientQt::transitionToCommittedForNewPage):
     17
    1182010-04-08  Joe Ligman  <joseph.ligman@nokia.com>
    219
  • trunk/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp

    r57210 r57277  
    216216    const QSize preferredLayoutSize = page->preferredContentsSize();
    217217
     218    ScrollbarMode hScrollbar = (ScrollbarMode) m_webFrame->scrollBarPolicy(Qt::Horizontal);
     219    ScrollbarMode vScrollbar = (ScrollbarMode) m_webFrame->scrollBarPolicy(Qt::Vertical);
     220    bool hLock = hScrollbar != ScrollbarAuto;
     221    bool vLock = vScrollbar != ScrollbarAuto;
     222
    218223    m_frame->createView(m_webFrame->page()->viewportSize(),
    219224                        backgroundColor, !backgroundColor.alpha(),
    220225                        preferredLayoutSize.isValid() ? IntSize(preferredLayoutSize) : IntSize(),
    221226                        preferredLayoutSize.isValid(),
    222                         (ScrollbarMode)m_webFrame->scrollBarPolicy(Qt::Horizontal),
    223                         (ScrollbarMode)m_webFrame->scrollBarPolicy(Qt::Vertical));
     227                        hScrollbar, hLock,
     228                        vScrollbar, vLock);
    224229}
    225230
  • trunk/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp

    r56208 r57277  
    586586    void scrollPosition();
    587587    void scrollToAnchor();
     588    void scrollbarsOff();
    588589    void evaluateWillCauseRepaint();
    589590    void qObjectWrapperWithSameIdentity();
     
    27972798}
    27982799
     2800
     2801void tst_QWebFrame::scrollbarsOff()
     2802{
     2803    QWebView view;
     2804    QWebFrame* mainFrame = view.page()->mainFrame();
     2805
     2806    mainFrame->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff);
     2807    mainFrame->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff);
     2808
     2809    QString html("<script>" \
     2810                 "   function checkScrollbar() {" \
     2811                 "       if (innerWidth === document.documentElement.offsetWidth)" \
     2812                 "           document.getElementById('span1').innerText = 'SUCCESS';" \
     2813                 "       else" \
     2814                 "           document.getElementById('span1').innerText = 'FAIL';" \
     2815                 "   }" \
     2816                 "</script>" \
     2817                 "<body>" \
     2818                 "   <div style='margin-top:1000px ; margin-left:1000px'>" \
     2819                 "       <a id='offscreen' href='a'>End</a>" \
     2820                 "   </div>" \
     2821                 "<span id='span1'></span>" \
     2822                 "</body>");
     2823
     2824
     2825    view.setHtml(html);
     2826    ::waitForSignal(&view, SIGNAL(loadFinished(bool)));
     2827
     2828    mainFrame->evaluateJavaScript("checkScrollbar();");
     2829    QCOMPARE(mainFrame->documentElement().findAll("span").at(0).toPlainText(), QString("SUCCESS"));
     2830}
     2831
    27992832void tst_QWebFrame::evaluateWillCauseRepaint()
    28002833{
  • trunk/WebKitTools/ChangeLog

    r57265 r57277  
     12010-04-01  Antonio Gomes  <tonikitoo@webkit.org>
     2
     3        Reviewed by David Hyatt.
     4
     5        [Qt] REGRESSION:(r50665) QWebFrame::setScrollBarPolicy(Qt::Vertical,Qt::ScrollBarAlwaysOff) has no effect.
     6        https://bugs.webkit.org/show_bug.cgi?id=29431
     7
     8        Make possible to DRT to set scrollbar policies (on, off or auto).
     9
     10        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
     11        (LayoutTestController::setScrollbarPolicy):
     12        * DumpRenderTree/qt/LayoutTestControllerQt.h:
     13        * QtLauncher/main.cpp:
     14        (LauncherWindow::toggleScrollbars):
     15        (LauncherWindow::createChrome):
     16
    1172010-04-08  Adam Barth  <abarth@webkit.org>
    218
  • trunk/WebKitTools/DumpRenderTree/qt/DumpRenderTreeQt.cpp

    r57131 r57277  
    448448    qt_drt_clearFrameName(m_page->mainFrame());
    449449
     450    m_page->mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAsNeeded);
     451    m_page->mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAsNeeded);
     452
    450453    WorkQueue::shared()->clear();
    451454    WorkQueue::shared()->setFrozen(false);
  • trunk/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp

    r56740 r57277  
    542542}
    543543
     544void LayoutTestController::setScrollbarPolicy(const QString& orientation, const QString& policy)
     545{
     546    Qt::Orientation o;
     547    Qt::ScrollBarPolicy p;
     548
     549    if (orientation == "vertical")
     550        o = Qt::Vertical;
     551    else if (orientation == "horizontal")
     552        o = Qt::Horizontal;
     553    else
     554        return;
     555
     556    if (policy == "on")
     557        p = Qt::ScrollBarAlwaysOn;
     558    else if (policy == "auto")
     559        p = Qt::ScrollBarAsNeeded;
     560    else if (policy == "off")
     561        p = Qt::ScrollBarAlwaysOff;
     562    else
     563        return;
     564
     565    m_drt->webPage()->mainFrame()->setScrollBarPolicy(o, p);
     566}
     567
    544568const unsigned LayoutTestController::maxViewWidth = 800;
    545569const unsigned LayoutTestController::maxViewHeight = 600;
  • trunk/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.h

    r56740 r57277  
    166166    bool callShouldCloseOnWebView();
    167167
     168    /*
     169        Policy values: 'on', 'auto' or 'off'.
     170        Orientation values: 'vertical' or 'horizontal'.
     171    */
     172    void setScrollbarPolicy(const QString& orientation, const QString& policy);
     173
    168174private slots:
    169175    void processWork();
Note: See TracChangeset for help on using the changeset viewer.