Convert ScrollableArea ASSERT_NOT_REACHED virtuals
authorenne@google.com <enne@google.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 23 Aug 2012 17:41:18 +0000 (17:41 +0000)
committerenne@google.com <enne@google.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 23 Aug 2012 17:41:18 +0000 (17:41 +0000)
https://bugs.webkit.org/show_bug.cgi?id=93306

Reviewed by Darin Adler.

Source/WebCore:

ASSERT_NOT_REACHED is a bad way to make sure that a virtual function
gets an override, because it only fails at run-time in debug builds.

To fix this, convert the virtuals in ScrollableArea that have
ASSERT_NOT_REACHED to be either pure virtual or implemented directly
in ScrollableArea. Add implementations where necessary to make derived
classes concrete.

Additionally, consistently add OVERRIDE for virtual functions in
derived classes that override ScrollableArea methods.

* WebCore.exp.in:
* page/FrameView.h:
(FrameView):
* platform/ScrollView.h:
(ScrollView):
* platform/ScrollableArea.cpp:
(WebCore::ScrollableArea::scrollPosition):
(WebCore):
(WebCore::ScrollableArea::minimumScrollPosition):
(WebCore::ScrollableArea::maximumScrollPosition):
(WebCore::ScrollableArea::visibleContentRect):
* platform/ScrollableArea.h:
(ScrollableArea):
(WebCore::ScrollableArea::overhangAmount):
* platform/chromium/FramelessScrollView.cpp:
(WebCore::FramelessScrollView::isOnActivePage):
(WebCore):
(WebCore::FramelessScrollView::scrollableAreaBoundingBox):
* platform/chromium/FramelessScrollView.h:
(FramelessScrollView):
* platform/win/PopupMenuWin.cpp:
(WebCore::PopupMenuWin::visibleHeight):
(WebCore):
(WebCore::PopupMenuWin::visibleWidth):
(WebCore::PopupMenuWin::contentsSize):
(WebCore::PopupMenuWin::isOnActivePage):
(WebCore::PopupMenuWin::scrollableAreaBoundingBox):
* platform/win/PopupMenuWin.h:
(PopupMenuWin):
* rendering/RenderListBox.cpp:
* rendering/RenderListBox.h:
(RenderListBox):

Source/WebKit/chromium:

Add implementations where necessary to make derived classes concrete.
Add OVERRIDE for ScrollableArea functions.

* src/ScrollbarGroup.h:
(ScrollbarGroup):
(WebKit::ScrollbarGroup::scrollCornerRect):
* tests/ScrollAnimatorNoneTest.cpp:
(MockScrollableArea):

Source/WebKit/win:

Add implementations where necessary to make derived classes concrete.
Add OVERRIDE for ScrollableArea functions.

* WebScrollBar.cpp:
(WebScrollBar::visibleHeight):
(WebScrollBar::visibleWidth):
(WebScrollBar::contentsSize):
(WebScrollBar::isOnActivePage):
(WebScrollBar::scrollableAreaBoundingBox):
* WebScrollBar.h:
(WebScrollBar):

Source/WebKit2:

Add implementations where necessary to make derived classes concrete.
Add OVERRIDE for ScrollableArea functions.

* UIProcess/win/WebPopupMenuProxyWin.cpp:
(WebKit::WebPopupMenuProxyWin::visibleHeight):
(WebKit):
(WebKit::WebPopupMenuProxyWin::visibleWidth):
(WebKit::WebPopupMenuProxyWin::contentsSize):
(WebKit::WebPopupMenuProxyWin::scrollableAreaBoundingBox):
* UIProcess/win/WebPopupMenuProxyWin.h:
(WebPopupMenuProxyWin):
* WebProcess/Plugins/PDF/BuiltInPDFView.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@126444 268f45cc-cd09-0410-ab3c-d52691b4dbfc

22 files changed:
Source/WebCore/ChangeLog
Source/WebCore/WebCore.exp.in
Source/WebCore/page/FrameView.h
Source/WebCore/platform/ScrollView.h
Source/WebCore/platform/ScrollableArea.cpp
Source/WebCore/platform/ScrollableArea.h
Source/WebCore/platform/chromium/FramelessScrollView.cpp
Source/WebCore/platform/chromium/FramelessScrollView.h
Source/WebCore/platform/win/PopupMenuWin.cpp
Source/WebCore/platform/win/PopupMenuWin.h
Source/WebCore/rendering/RenderListBox.cpp
Source/WebCore/rendering/RenderListBox.h
Source/WebKit/chromium/ChangeLog
Source/WebKit/chromium/src/ScrollbarGroup.h
Source/WebKit/chromium/tests/ScrollAnimatorNoneTest.cpp
Source/WebKit/win/ChangeLog
Source/WebKit/win/WebScrollBar.cpp
Source/WebKit/win/WebScrollBar.h
Source/WebKit2/ChangeLog
Source/WebKit2/UIProcess/win/WebPopupMenuProxyWin.cpp
Source/WebKit2/UIProcess/win/WebPopupMenuProxyWin.h
Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFView.h

index a030d30..98aa461 100644 (file)
@@ -1,3 +1,54 @@
+2012-08-23  Adrienne Walker  <enne@google.com>
+
+        Convert ScrollableArea ASSERT_NOT_REACHED virtuals
+        https://bugs.webkit.org/show_bug.cgi?id=93306
+
+        Reviewed by Darin Adler.
+
+        ASSERT_NOT_REACHED is a bad way to make sure that a virtual function
+        gets an override, because it only fails at run-time in debug builds.
+
+        To fix this, convert the virtuals in ScrollableArea that have
+        ASSERT_NOT_REACHED to be either pure virtual or implemented directly
+        in ScrollableArea. Add implementations where necessary to make derived
+        classes concrete.
+
+        Additionally, consistently add OVERRIDE for virtual functions in
+        derived classes that override ScrollableArea methods.
+
+        * WebCore.exp.in:
+        * page/FrameView.h:
+        (FrameView):
+        * platform/ScrollView.h:
+        (ScrollView):
+        * platform/ScrollableArea.cpp:
+        (WebCore::ScrollableArea::scrollPosition):
+        (WebCore):
+        (WebCore::ScrollableArea::minimumScrollPosition):
+        (WebCore::ScrollableArea::maximumScrollPosition):
+        (WebCore::ScrollableArea::visibleContentRect):
+        * platform/ScrollableArea.h:
+        (ScrollableArea):
+        (WebCore::ScrollableArea::overhangAmount):
+        * platform/chromium/FramelessScrollView.cpp:
+        (WebCore::FramelessScrollView::isOnActivePage):
+        (WebCore):
+        (WebCore::FramelessScrollView::scrollableAreaBoundingBox):
+        * platform/chromium/FramelessScrollView.h:
+        (FramelessScrollView):
+        * platform/win/PopupMenuWin.cpp:
+        (WebCore::PopupMenuWin::visibleHeight):
+        (WebCore):
+        (WebCore::PopupMenuWin::visibleWidth):
+        (WebCore::PopupMenuWin::contentsSize):
+        (WebCore::PopupMenuWin::isOnActivePage):
+        (WebCore::PopupMenuWin::scrollableAreaBoundingBox):
+        * platform/win/PopupMenuWin.h:
+        (PopupMenuWin):
+        * rendering/RenderListBox.cpp:
+        * rendering/RenderListBox.h:
+        (RenderListBox):
+
 2012-08-23  Alexander Shalamov  <alexander.shalamov@intel.com>
 
         getComputedStyle returns wrong value for CSS3 2D transformations
index 770dd85..dd677fd 100644 (file)
@@ -1619,6 +1619,7 @@ __ZN7WebCore7nsColorERKNS_5ColorE
 __ZN7WebCore8IntPointC1ERK8_NSPoint
 __ZN7WebCore9FloatRectC1ERK7_NSRect
 __ZNK7WebCore10FloatPointcv8_NSPointEv
+__ZNK7WebCore14ScrollableArea18visibleContentRectEb
 __ZNK7WebCore6Cursor14platformCursorEv
 __ZNK7WebCore7IntRectcv7_NSRectEv
 __ZNK7WebCore7IntSizecv6CGSizeEv
index 6ab968e..7e73150 100644 (file)
@@ -398,23 +398,21 @@ private:
 
     // Override ScrollView methods to do point conversion via renderers, in order to
     // take transforms into account.
-    virtual IntRect convertToContainingView(const IntRect&) const;
-    virtual IntRect convertFromContainingView(const IntRect&) const;
-    virtual IntPoint convertToContainingView(const IntPoint&) const;
-    virtual IntPoint convertFromContainingView(const IntPoint&) const;
+    virtual IntRect convertToContainingView(const IntRect&) const OVERRIDE;
+    virtual IntRect convertFromContainingView(const IntRect&) const OVERRIDE;
+    virtual IntPoint convertToContainingView(const IntPoint&) const OVERRIDE;
+    virtual IntPoint convertFromContainingView(const IntPoint&) const OVERRIDE;
 
     // ScrollableArea interface
-    virtual void invalidateScrollbarRect(Scrollbar*, const IntRect&);
-    virtual bool isActive() const;
-    virtual void getTickmarks(Vector<IntRect>&) const;
-    virtual void scrollTo(const IntSize&);
-    virtual void setVisibleScrollerThumbRect(const IntRect&);
-    virtual bool isOnActivePage() const;
-    virtual ScrollableArea* enclosingScrollableArea() const;
+    virtual void invalidateScrollbarRect(Scrollbar*, const IntRect&) OVERRIDE;
+    virtual bool isActive() const OVERRIDE;
+    virtual void getTickmarks(Vector<IntRect>&) const OVERRIDE;
+    virtual void scrollTo(const IntSize&) OVERRIDE;
+    virtual void setVisibleScrollerThumbRect(const IntRect&) OVERRIDE;
+    virtual bool isOnActivePage() const OVERRIDE;
+    virtual ScrollableArea* enclosingScrollableArea() const OVERRIDE;
     virtual IntRect scrollableAreaBoundingBox() const OVERRIDE;
-
-    void updateScrollableAreaSet();
-
+    virtual bool scrollAnimatorEnabled() const OVERRIDE;
 #if USE(ACCELERATED_COMPOSITING)
     virtual GraphicsLayer* layerForHorizontalScrollbar() const OVERRIDE;
     virtual GraphicsLayer* layerForVerticalScrollbar() const OVERRIDE;
@@ -424,9 +422,9 @@ private:
 #endif
 #endif
 
-    virtual void notifyPageThatContentAreaWillPaint() const;
+    void updateScrollableAreaSet();
 
-    virtual bool scrollAnimatorEnabled() const;
+    virtual void notifyPageThatContentAreaWillPaint() const;
 
     void deferredRepaintTimerFired(Timer<FrameView>*);
     void doDeferredRepaints();
index 81a56b2..2cbcc27 100644 (file)
@@ -52,13 +52,14 @@ class ScrollView : public Widget, public ScrollableArea {
 public:
     ~ScrollView();
 
-    // ScrollableArea functions.  FrameView overrides the others.
-    virtual int scrollSize(ScrollbarOrientation orientation) const;
-    virtual int scrollPosition(Scrollbar*) const;
-    virtual void setScrollOffset(const IntPoint&);
+    // ScrollableArea functions.
+    virtual int scrollSize(ScrollbarOrientation) const OVERRIDE;
+    virtual int scrollPosition(Scrollbar*) const OVERRIDE;
+    virtual void setScrollOffset(const IntPoint&) OVERRIDE;
+    virtual bool isScrollCornerVisible() const OVERRIDE;
+    virtual void scrollbarStyleChanged(int newStyle, bool forceUpdate) OVERRIDE;
+
     virtual void notifyPageThatContentAreaWillPaint() const;
-    virtual bool isScrollCornerVisible() const;
-    virtual void scrollbarStyleChanged(int newStyle, bool forceUpdate);
 
     // NOTE: This should only be called by the overriden setScrollOffset from ScrollableArea.
     virtual void scrollTo(const IntSize& newOffset);
@@ -74,11 +75,11 @@ public:
     const HashSet<RefPtr<Widget> >* children() const { return &m_children; }
     virtual void addChild(PassRefPtr<Widget>);
     virtual void removeChild(Widget*);
-    
+
     // If the scroll view does not use a native widget, then it will have cross-platform Scrollbars. These functions
     // can be used to obtain those scrollbars.
-    virtual Scrollbar* horizontalScrollbar() const { return m_horizontalScrollbar.get(); }
-    virtual Scrollbar* verticalScrollbar() const { return m_verticalScrollbar.get(); }
+    virtual Scrollbar* horizontalScrollbar() const OVERRIDE { return m_horizontalScrollbar.get(); }
+    virtual Scrollbar* verticalScrollbar() const OVERRIDE { return m_verticalScrollbar.get(); }
     bool isScrollViewScrollbar(const Widget* child) const { return horizontalScrollbar() == child || verticalScrollbar() == child; }
 
     void positionScrollbarLayers();
@@ -107,7 +108,7 @@ public:
 
     virtual bool avoidScrollbarCreation() const { return false; }
 
-    virtual void setScrollbarOverlayStyle(ScrollbarOverlayStyle);
+    virtual void setScrollbarOverlayStyle(ScrollbarOverlayStyle) OVERRIDE;
 
     // By default you only receive paint events for the area that is visible. In the case of using a
     // tiled backing store, this function can be set, so that the view paints the entire contents.
@@ -143,12 +144,12 @@ public:
     // In the situation the client is responsible for the scrolling (ie. with a tiled backing store) it is possible to use
     // the setFixedVisibleContentRect instead for the mainframe, though this must be updated manually, e.g just before resuming the page
     // which usually will happen when panning, pinching and rotation ends, or when scale or position are changed manually.
-    virtual IntRect visibleContentRect(bool includeScrollbars = false) const;
+    virtual IntRect visibleContentRect(bool includeScrollbars = false) const OVERRIDE;
     virtual void setFixedVisibleContentRect(const IntRect& visibleContentRect) { m_fixedVisibleContentRect = visibleContentRect; }
     IntRect fixedVisibleContentRect() const { return m_fixedVisibleContentRect; }
     IntSize visibleSize() const { return visibleContentRect().size(); }
-    int visibleWidth() const { return visibleContentRect().width(); }
-    int visibleHeight() const { return visibleContentRect().height(); }
+    virtual int visibleWidth() const OVERRIDE { return visibleContentRect().width(); }
+    virtual int visibleHeight() const OVERRIDE { return visibleContentRect().height(); }
 
     // Functions for getting/setting the size webkit should use to layout the contents. By default this is the same as the visible
     // content size. Explicitly setting a layout size value will cause webkit to layout the contents using this size instead.
@@ -162,22 +163,22 @@ public:
     
     // Functions for getting/setting the size of the document contained inside the ScrollView (as an IntSize or as individual width and height
     // values).
-    IntSize contentsSize() const; // Always at least as big as the visibleWidth()/visibleHeight().
+    virtual IntSize contentsSize() const OVERRIDE; // Always at least as big as the visibleWidth()/visibleHeight().
     int contentsWidth() const { return contentsSize().width(); }
     int contentsHeight() const { return contentsSize().height(); }
     virtual void setContentsSize(const IntSize&);
 
     // Functions for querying the current scrolled position (both as a point, a size, or as individual X and Y values).
-    IntPoint scrollPosition() const { return visibleContentRect().location(); }
+    virtual IntPoint scrollPosition() const OVERRIDE { return visibleContentRect().location(); }
     IntSize scrollOffset() const { return visibleContentRect().location() - IntPoint(); } // Gets the scrolled position as an IntSize. Convenient for adding to other sizes.
-    IntPoint maximumScrollPosition() const; // The maximum position we can be scrolled to.
-    IntPoint minimumScrollPosition() const; // The minimum position we can be scrolled to.
+    virtual IntPoint maximumScrollPosition() const OVERRIDE; // The maximum position we can be scrolled to.
+    virtual IntPoint minimumScrollPosition() const OVERRIDE; // The minimum position we can be scrolled to.
     // Adjust the passed in scroll position to keep it between the minimum and maximum positions.
     IntPoint adjustScrollPositionWithinRange(const IntPoint&) const; 
     int scrollX() const { return scrollPosition().x(); }
     int scrollY() const { return scrollPosition().y(); }
 
-    IntSize overhangAmount() const;
+    virtual IntSize overhangAmount() const OVERRIDE;
 
     void cacheCurrentScrollPosition() { m_cachedScrollPosition = scrollPosition(); }
     IntPoint cachedScrollPosition() const { return m_cachedScrollPosition; }
@@ -277,10 +278,10 @@ public:
     virtual void paintScrollCorner(GraphicsContext*, const IntRect& cornerRect);
     virtual void paintScrollbar(GraphicsContext*, Scrollbar*, const IntRect&);
 
-    virtual IntRect convertFromScrollbarToContainingView(const Scrollbar*, const IntRect&) const;
-    virtual IntRect convertFromContainingViewToScrollbar(const Scrollbar*, const IntRect&) const;
-    virtual IntPoint convertFromScrollbarToContainingView(const Scrollbar*, const IntPoint&) const;
-    virtual IntPoint convertFromContainingViewToScrollbar(const Scrollbar*, const IntPoint&) const;
+    virtual IntRect convertFromScrollbarToContainingView(const Scrollbar*, const IntRect&) const OVERRIDE;
+    virtual IntRect convertFromContainingViewToScrollbar(const Scrollbar*, const IntRect&) const OVERRIDE;
+    virtual IntPoint convertFromScrollbarToContainingView(const Scrollbar*, const IntPoint&) const OVERRIDE;
+    virtual IntPoint convertFromContainingViewToScrollbar(const Scrollbar*, const IntPoint&) const OVERRIDE;
 
     bool containsScrollableAreaWithOverlayScrollbars() const { return m_containsScrollableAreaWithOverlayScrollbars; }
     void setContainsScrollableAreaWithOverlayScrollbars(bool contains) { m_containsScrollableAreaWithOverlayScrollbars = contains; }
@@ -302,7 +303,7 @@ protected:
     void setHasVerticalScrollbar(bool);
 
     virtual void updateScrollCorner();
-    virtual void invalidateScrollCornerRect(const IntRect&);
+    virtual void invalidateScrollCornerRect(const IntRect&) OVERRIDE;
 
     // Scroll the content by blitting the pixels.
     virtual bool scrollContentsFastPath(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect);
index 103e038..b4e7e55 100644 (file)
@@ -373,4 +373,39 @@ void ScrollableArea::serviceScrollAnimations()
         scrollAnimator->serviceScrollAnimations();
 }
 
+IntPoint ScrollableArea::scrollPosition() const
+{
+    int x = horizontalScrollbar() ? horizontalScrollbar()->value() : 0;
+    int y = verticalScrollbar() ? verticalScrollbar()->value() : 0;
+    return IntPoint(x, y);
+}
+
+IntPoint ScrollableArea::minimumScrollPosition() const
+{
+    return IntPoint();
+}
+
+IntPoint ScrollableArea::maximumScrollPosition() const
+{
+    return IntPoint(contentsSize().width() - visibleWidth(), contentsSize().height() - visibleHeight());
+}
+
+IntRect ScrollableArea::visibleContentRect(bool includeScrollbars) const
+{
+    int verticalScrollbarWidth = 0;
+    int horizontalScrollbarHeight = 0;
+
+    if (includeScrollbars) {
+        if (Scrollbar* verticalBar = verticalScrollbar())
+            verticalScrollbarWidth = !verticalBar->isOverlayScrollbar() ? verticalBar->width() : 0;
+        if (Scrollbar* horizontalBar = horizontalScrollbar())
+            horizontalScrollbarHeight = !horizontalBar->isOverlayScrollbar() ? horizontalBar->height() : 0;
+    }
+
+    return IntRect(scrollPosition().x(),
+                   scrollPosition().y(),
+                   std::max(0, visibleWidth() + verticalScrollbarWidth),
+                   std::max(0, visibleHeight() + horizontalScrollbarHeight));
+}
+
 } // namespace WebCore
index 5a278a9..721ec32 100644 (file)
@@ -133,27 +133,27 @@ public:
     virtual Scrollbar* horizontalScrollbar() const { return 0; }
     virtual Scrollbar* verticalScrollbar() const { return 0; }
 
-    virtual IntPoint scrollPosition() const { ASSERT_NOT_REACHED(); return IntPoint(); }
-    virtual IntPoint minimumScrollPosition() const { ASSERT_NOT_REACHED(); return IntPoint(); }
-    virtual IntPoint maximumScrollPosition() const { ASSERT_NOT_REACHED(); return IntPoint(); }
-    virtual IntRect visibleContentRect(bool /*includeScrollbars*/ = false) const { ASSERT_NOT_REACHED(); return IntRect(); }
-    virtual int visibleHeight() const { ASSERT_NOT_REACHED(); return 0; }
-    virtual int visibleWidth() const { ASSERT_NOT_REACHED(); return 0; }
-    virtual IntSize contentsSize() const { ASSERT_NOT_REACHED(); return IntSize(); }
-    virtual IntSize overhangAmount() const { ASSERT_NOT_REACHED(); return IntSize(); }
+    virtual IntPoint scrollPosition() const;
+    virtual IntPoint minimumScrollPosition() const;
+    virtual IntPoint maximumScrollPosition() const;
+    virtual IntRect visibleContentRect(bool /*includeScrollbars*/ = false) const;
+    virtual int visibleHeight() const = 0;
+    virtual int visibleWidth() const = 0;
+    virtual IntSize contentsSize() const = 0;
+    virtual IntSize overhangAmount() const { return IntSize(); }
     virtual IntPoint currentMousePosition() const { return IntPoint(); }
 
     virtual bool shouldSuspendScrollAnimations() const { return true; }
     virtual void scrollbarStyleChanged(int /*newStyle*/, bool /*forceUpdate*/) { }
     virtual void setVisibleScrollerThumbRect(const IntRect&) { }
 
-    virtual bool isOnActivePage() const { ASSERT_NOT_REACHED(); return true; }
+    virtual bool isOnActivePage() const = 0;
     
     // Note that this only returns scrollable areas that can actually be scrolled.
     virtual ScrollableArea* enclosingScrollableArea() const = 0;
 
     // Returns the bounding box of this scrollable area, in the coordinate system of the enclosing scroll view.
-    virtual IntRect scrollableAreaBoundingBox() const { ASSERT_NOT_REACHED(); return IntRect(); }
+    virtual IntRect scrollableAreaBoundingBox() const = 0;
 
     virtual bool shouldRubberBandInDirection(ScrollDirection) const { return true; }
 
index 73bec0d..c410677 100644 (file)
@@ -63,6 +63,16 @@ ScrollableArea* FramelessScrollView::enclosingScrollableArea() const
     return 0;
 }
 
+bool FramelessScrollView::isOnActivePage() const
+{
+    return isActive();
+}
+
+IntRect FramelessScrollView::scrollableAreaBoundingBox() const
+{
+    return windowClipRect(false);
+}
+
 void FramelessScrollView::invalidateRect(const IntRect& rect)
 {
     if (HostWindow* h = hostWindow())
index 3498475..ac1eecd 100644 (file)
@@ -74,9 +74,11 @@ namespace WebCore {
 #endif
 
         // ScrollableArea public methods:
-        virtual void invalidateScrollbarRect(Scrollbar*, const IntRect&);
-        virtual bool isActive() const;
-        virtual ScrollableArea* enclosingScrollableArea() const;
+        virtual void invalidateScrollbarRect(Scrollbar*, const IntRect&) OVERRIDE;
+        virtual bool isActive() const OVERRIDE;
+        virtual ScrollableArea* enclosingScrollableArea() const OVERRIDE;
+        virtual bool isOnActivePage() const OVERRIDE;
+        virtual IntRect scrollableAreaBoundingBox() const OVERRIDE;
 
         // Widget public methods:
         virtual void invalidateRect(const IntRect&);
index eb5c5b1..a86847d 100644 (file)
@@ -726,6 +726,31 @@ void PopupMenuWin::invalidateScrollbarRect(Scrollbar* scrollbar, const IntRect&
     ::InvalidateRect(m_popup, &r, false);
 }
 
+int PopupMenuWin::visibleHeight() const
+{
+    return m_scrollbar ? m_scrollbar->visibleSize() : m_windowRect.height();
+}
+
+int PopupMenuWin::visibleWidth() const
+{
+    return m_windowRect.width();
+}
+
+IntSize PopupMenuWin::contentsSize() const
+{
+    return m_windowRect.size();
+}
+
+bool PopupMenuWin::isOnActivePage() const
+{
+    return m_showPopup;
+}
+
+IntRect PopupMenuWin::scrollableAreaBoundingBox() const
+{
+    return m_windowRect;
+}
+
 void PopupMenuWin::registerClass()
 {
     static bool haveRegisteredWindowClass = false;
index 3aee51c..9b6ffa7 100644 (file)
@@ -91,16 +91,21 @@ private:
     void setScrollbarCapturingMouse(bool b) { m_scrollbarCapturingMouse = b; }
 
     // ScrollableArea
-    virtual int scrollSize(ScrollbarOrientation orientation) const;
-    virtual int scrollPosition(Scrollbar*) const;
-    virtual void setScrollOffset(const IntPoint&);
-    virtual void invalidateScrollbarRect(Scrollbar*, const IntRect&);
-    virtual void invalidateScrollCornerRect(const WebCore::IntRect&) { }
-    virtual bool isActive() const { return true; }
-    ScrollableArea* enclosingScrollableArea() const { return 0; }
-    virtual bool isScrollCornerVisible() const { return false; }
-    virtual WebCore::IntRect scrollCornerRect() const { return WebCore::IntRect(); }
-    virtual Scrollbar* verticalScrollbar() const { return m_scrollbar.get(); }
+    virtual int scrollSize(ScrollbarOrientation) const OVERRIDE;
+    virtual int scrollPosition(Scrollbar*) const OVERRIDE;
+    virtual void setScrollOffset(const IntPoint&) OVERRIDE;
+    virtual void invalidateScrollbarRect(Scrollbar*, const IntRect&) OVERRIDE;
+    virtual void invalidateScrollCornerRect(const IntRect&) OVERRIDE { }
+    virtual bool isActive() const OVERRIDE { return true; }
+    ScrollableArea* enclosingScrollableArea() const OVERRIDE { return 0; }
+    virtual bool isScrollCornerVisible() const OVERRIDE { return false; }
+    virtual IntRect scrollCornerRect() const OVERRIDE { return IntRect(); }
+    virtual Scrollbar* verticalScrollbar() const OVERRIDE { return m_scrollbar.get(); }
+    virtual int visibleHeight() const OVERRIDE;
+    virtual int visibleWidth() const OVERRIDE;
+    virtual IntSize contentsSize() const OVERRIDE;
+    virtual bool isOnActivePage() const OVERRIDE;
+    virtual IntRect scrollableAreaBoundingBox() const OVERRIDE;
 
     // NOTE: This should only be called by the overriden setScrollOffset from ScrollableArea.
     void scrollTo(int offset);
index 944ea5f..6376b09 100644 (file)
@@ -632,11 +632,6 @@ void RenderListBox::setScrollOffset(const IntPoint& offset)
     scrollTo(offset.y());
 }
 
-IntPoint RenderListBox::scrollPosition() const
-{
-    return IntPoint(0, m_indexOffset);
-}
-
 void RenderListBox::scrollTo(int newOffset)
 {
     if (newOffset == m_indexOffset)
index d968c87..4961912 100644 (file)
@@ -101,28 +101,27 @@ private:
     virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, const HitTestPoint& pointInContainer, const LayoutPoint& accumulatedOffset, HitTestAction) OVERRIDE;
 
     // ScrollableArea interface.
-    virtual int scrollSize(ScrollbarOrientation) const;
-    virtual int scrollPosition(Scrollbar*) const;
-    virtual void setScrollOffset(const IntPoint&);
-    virtual IntPoint scrollPosition() const OVERRIDE;
-    virtual void invalidateScrollbarRect(Scrollbar*, const IntRect&);
-    virtual bool isActive() const;
-    virtual bool isScrollCornerVisible() const { return false; } // We don't support resize on list boxes yet. If we did these would have to change.
-    virtual IntRect scrollCornerRect() const { return IntRect(); }
-    virtual void invalidateScrollCornerRect(const IntRect&) { }
-    virtual IntRect convertFromScrollbarToContainingView(const Scrollbar*, const IntRect&) const;
-    virtual IntRect convertFromContainingViewToScrollbar(const Scrollbar*, const IntRect&) const;
-    virtual IntPoint convertFromScrollbarToContainingView(const Scrollbar*, const IntPoint&) const;
-    virtual IntPoint convertFromContainingViewToScrollbar(const Scrollbar*, const IntPoint&) const;
-    virtual Scrollbar* verticalScrollbar() const { return m_vBar.get(); }
-    virtual IntSize contentsSize() const;
-    virtual int visibleHeight() const;
-    virtual int visibleWidth() const;
-    virtual IntPoint currentMousePosition() const;
-    virtual bool shouldSuspendScrollAnimations() const;
-    virtual bool isOnActivePage() const;
-
-    virtual ScrollableArea* enclosingScrollableArea() const;
+    virtual int scrollSize(ScrollbarOrientation) const OVERRIDE;
+    virtual int scrollPosition(Scrollbar*) const OVERRIDE;
+    virtual void setScrollOffset(const IntPoint&) OVERRIDE;
+    virtual void invalidateScrollbarRect(Scrollbar*, const IntRect&) OVERRIDE;
+    virtual bool isActive() const OVERRIDE;
+    virtual bool isScrollCornerVisible() const OVERRIDE { return false; } // We don't support resize on list boxes yet. If we did these would have to change.
+    virtual IntRect scrollCornerRect() const OVERRIDE { return IntRect(); }
+    virtual void invalidateScrollCornerRect(const IntRect&) OVERRIDE { }
+    virtual IntRect convertFromScrollbarToContainingView(const Scrollbar*, const IntRect&) const OVERRIDE;
+    virtual IntRect convertFromContainingViewToScrollbar(const Scrollbar*, const IntRect&) const OVERRIDE;
+    virtual IntPoint convertFromScrollbarToContainingView(const Scrollbar*, const IntPoint&) const OVERRIDE;
+    virtual IntPoint convertFromContainingViewToScrollbar(const Scrollbar*, const IntPoint&) const OVERRIDE;
+    virtual Scrollbar* verticalScrollbar() const OVERRIDE { return m_vBar.get(); }
+    virtual IntSize contentsSize() const OVERRIDE;
+    virtual int visibleHeight() const OVERRIDE;
+    virtual int visibleWidth() const OVERRIDE;
+    virtual IntPoint currentMousePosition() const OVERRIDE;
+    virtual bool shouldSuspendScrollAnimations() const OVERRIDE;
+    virtual bool isOnActivePage() const OVERRIDE;
+
+    virtual ScrollableArea* enclosingScrollableArea() const OVERRIDE;
     virtual IntRect scrollableAreaBoundingBox() const OVERRIDE;
 
     // NOTE: This should only be called by the overriden setScrollOffset from ScrollableArea.
index af50068..0f9f650 100644 (file)
@@ -1,3 +1,19 @@
+2012-08-23  Adrienne Walker  <enne@google.com>
+
+        Convert ScrollableArea ASSERT_NOT_REACHED virtuals
+        https://bugs.webkit.org/show_bug.cgi?id=93306
+
+        Reviewed by Darin Adler.
+
+        Add implementations where necessary to make derived classes concrete.
+        Add OVERRIDE for ScrollableArea functions.
+
+        * src/ScrollbarGroup.h:
+        (ScrollbarGroup):
+        (WebKit::ScrollbarGroup::scrollCornerRect):
+        * tests/ScrollAnimatorNoneTest.cpp:
+        (MockScrollableArea):
+
 2012-08-23  David Reveman  <reveman@chromium.org>
 
         [Chromium] Unnecessary delay when starting to update resources with an inactive vsync timer.
index a0479c2..3cccfdf 100644 (file)
@@ -49,31 +49,31 @@ public:
     void setFrameRect(const WebCore::IntRect&);
 
     // WebCore::ScrollableArea methods
-    virtual int scrollSize(WebCore::ScrollbarOrientation) const;
-    virtual int scrollPosition(WebCore::Scrollbar*) const;
-    virtual void setScrollOffset(const WebCore::IntPoint&);
-    virtual void invalidateScrollbarRect(WebCore::Scrollbar*, const WebCore::IntRect&);
-    virtual void invalidateScrollCornerRect(const WebCore::IntRect&);
-    virtual bool isActive() const;
-    virtual ScrollableArea* enclosingScrollableArea() const;
-    virtual WebCore::IntRect scrollCornerRect() const { return WebCore::IntRect(); }
-    virtual bool isScrollCornerVisible() const;
-    virtual void getTickmarks(Vector<WebCore::IntRect>&) const;
-    virtual WebCore::IntPoint convertFromContainingViewToScrollbar(const WebCore::Scrollbar*, const WebCore::IntPoint& parentPoint) const;
-    virtual WebCore::Scrollbar* horizontalScrollbar() const;
-    virtual WebCore::Scrollbar* verticalScrollbar() const;
-    virtual WebCore::IntPoint scrollPosition() const;
-    virtual WebCore::IntPoint minimumScrollPosition() const;
-    virtual WebCore::IntPoint maximumScrollPosition() const;
-    virtual int visibleHeight() const;
-    virtual int visibleWidth() const;
-    virtual WebCore::IntSize contentsSize() const;
-    virtual WebCore::IntSize overhangAmount() const;
-    virtual WebCore::IntPoint currentMousePosition() const;
-    virtual bool shouldSuspendScrollAnimations() const;
-    virtual void scrollbarStyleChanged(int newStyle, bool forceUpdate);
-    virtual bool isOnActivePage() const;
-    virtual WebCore::IntRect scrollableAreaBoundingBox() const;
+    virtual int scrollSize(WebCore::ScrollbarOrientation) const OVERRIDE;
+    virtual int scrollPosition(WebCore::Scrollbar*) const OVERRIDE;
+    virtual void setScrollOffset(const WebCore::IntPoint&) OVERRIDE;
+    virtual void invalidateScrollbarRect(WebCore::Scrollbar*, const WebCore::IntRect&) OVERRIDE;
+    virtual void invalidateScrollCornerRect(const WebCore::IntRect&) OVERRIDE;
+    virtual bool isActive() const OVERRIDE;
+    virtual ScrollableArea* enclosingScrollableArea() const OVERRIDE;
+    virtual WebCore::IntRect scrollCornerRect() const { return WebCore::IntRect() OVERRIDE; }
+    virtual bool isScrollCornerVisible() const OVERRIDE;
+    virtual void getTickmarks(Vector<WebCore::IntRect>&) const OVERRIDE;
+    virtual WebCore::IntPoint convertFromContainingViewToScrollbar(const WebCore::Scrollbar*, const WebCore::IntPoint& parentPoint) const OVERRIDE;
+    virtual WebCore::Scrollbar* horizontalScrollbar() const OVERRIDE;
+    virtual WebCore::Scrollbar* verticalScrollbar() const OVERRIDE;
+    virtual WebCore::IntPoint scrollPosition() const OVERRIDE;
+    virtual WebCore::IntPoint minimumScrollPosition() const OVERRIDE;
+    virtual WebCore::IntPoint maximumScrollPosition() const OVERRIDE;
+    virtual int visibleHeight() const OVERRIDE;
+    virtual int visibleWidth() const OVERRIDE;
+    virtual WebCore::IntSize contentsSize() const OVERRIDE;
+    virtual WebCore::IntSize overhangAmount() const OVERRIDE;
+    virtual WebCore::IntPoint currentMousePosition() const OVERRIDE;
+    virtual bool shouldSuspendScrollAnimations() const OVERRIDE;
+    virtual void scrollbarStyleChanged(int newStyle, bool forceUpdate) OVERRIDE;
+    virtual bool isOnActivePage() const OVERRIDE;
+    virtual WebCore::IntRect scrollableAreaBoundingBox() const OVERRIDE;
 
 private:
     WebCore::FrameView* m_frameView;
index 927d4a9..e71846a 100644 (file)
@@ -63,12 +63,20 @@ public:
     MOCK_METHOD1(invalidateScrollCornerRect, void(const IntRect&));
     MOCK_METHOD1(setScrollOffsetFromAnimation, void(const IntPoint&));
     MOCK_CONST_METHOD0(enclosingScrollableArea, ScrollableArea*());
-
-    virtual IntPoint scrollPosition() const { return IntPoint(); }
-    virtual int visibleHeight() const { return 768; }
-    virtual int visibleWidth() const { return 1024; }
-
-    bool scrollAnimatorEnabled() const { return m_scrollAnimatorEnabled; }
+    MOCK_CONST_METHOD0(minimumScrollPosition, IntPoint());
+    MOCK_CONST_METHOD0(maximumScrollPosition, IntPoint());
+    MOCK_CONST_METHOD1(visibleContentRect, IntRect(bool));
+    MOCK_CONST_METHOD0(contentsSize, IntSize());
+    MOCK_CONST_METHOD0(overhangAmount, IntSize());
+    MOCK_CONST_METHOD0(isOnActivePage, bool());
+    MOCK_CONST_METHOD0(scrollableAreaBoundingBox, IntRect());
+
+    virtual IntPoint scrollPosition() const OVERRIDE { return IntPoint(); }
+    virtual int visibleHeight() const OVERRIDE { return 768; }
+    virtual int visibleWidth() const OVERRIDE { return 1024; }
+    virtual bool scrollAnimatorEnabled() const OVERRIDE { return m_scrollAnimatorEnabled; }
+
+private:
     bool m_scrollAnimatorEnabled;
 };
 
index 96ce099..319a75c 100644 (file)
@@ -1,3 +1,22 @@
+2012-08-23  Adrienne Walker  <enne@google.com>
+
+        Convert ScrollableArea ASSERT_NOT_REACHED virtuals
+        https://bugs.webkit.org/show_bug.cgi?id=93306
+
+        Reviewed by Darin Adler.
+
+        Add implementations where necessary to make derived classes concrete.
+        Add OVERRIDE for ScrollableArea functions.
+
+        * WebScrollBar.cpp:
+        (WebScrollBar::visibleHeight):
+        (WebScrollBar::visibleWidth):
+        (WebScrollBar::contentsSize):
+        (WebScrollBar::isOnActivePage):
+        (WebScrollBar::scrollableAreaBoundingBox):
+        * WebScrollBar.h:
+        (WebScrollBar):
+
 2012-08-22  Nikhil Bhargava  <nbhargava@google.com>
 
         Reduce Font.h includes across project -- improves RenderObject.h compile time
index d3388c3..f172196 100644 (file)
@@ -284,3 +284,28 @@ Scrollbar* WebScrollBar::verticalScrollbar() const
 {
     return m_scrollBar->orientation() == VerticalScrollbar ? m_scrollBar.get() : 0;
 }
+
+int WebScrollBar::visibleHeight() const
+{
+    return m_scrollBar->height();
+}
+
+int WebScrollBar::visibleWidth() const
+{
+    return m_scrollBar->width();
+}
+
+WebCore::IntSize WebScrollBar::contentsSize() const
+{
+    return m_scrollBar->frameRect().size();
+}
+
+bool WebScrollBar::isOnActivePage() const
+{
+    return true;
+}
+
+WebCore::IntRect WebScrollBar::scrollableAreaBoundingBox() const
+{
+    return m_scrollBar->frameRect();
+}
index c97d0d7..dfd1ef0 100644 (file)
@@ -117,6 +117,11 @@ protected:
     virtual void invalidateScrollbarRect(WebCore::Scrollbar*, const WebCore::IntRect&);
     virtual void invalidateScrollCornerRect(const WebCore::IntRect&) { }
     virtual WebCore::ScrollableArea* enclosingScrollableArea() const { return 0; }
+    virtual int visibleHeight() const OVERRIDE;
+    virtual int visibleWidth() const OVERRIDE;
+    virtual WebCore::IntSize contentsSize() const OVERRIDE;
+    virtual bool isOnActivePage() const OVERRIDE;
+    virtual WebCore::IntRect scrollableAreaBoundingBox() const OVERRIDE;
 
     // FIXME: We should provide a way to set this value.
     virtual bool isActive() const { return true; }
index 5d39221..e0461a0 100644 (file)
@@ -1,3 +1,23 @@
+2012-08-23  Adrienne Walker  <enne@google.com>
+
+        Convert ScrollableArea ASSERT_NOT_REACHED virtuals
+        https://bugs.webkit.org/show_bug.cgi?id=93306
+
+        Reviewed by Darin Adler.
+
+        Add implementations where necessary to make derived classes concrete.
+        Add OVERRIDE for ScrollableArea functions.
+
+        * UIProcess/win/WebPopupMenuProxyWin.cpp:
+        (WebKit::WebPopupMenuProxyWin::visibleHeight):
+        (WebKit):
+        (WebKit::WebPopupMenuProxyWin::visibleWidth):
+        (WebKit::WebPopupMenuProxyWin::contentsSize):
+        (WebKit::WebPopupMenuProxyWin::scrollableAreaBoundingBox):
+        * UIProcess/win/WebPopupMenuProxyWin.h:
+        (WebPopupMenuProxyWin):
+        * WebProcess/Plugins/PDF/BuiltInPDFView.h:
+
 2012-08-23  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>
 
         [EFL][WK2] ewk_intent_request API test does not free Eina_List
index df4e985..a452807 100644 (file)
@@ -469,6 +469,27 @@ void WebPopupMenuProxyWin::setScrollOffset(const IntPoint& offset)
     scrollTo(offset.y());
 }
 
+int WebPopupMenuProxyWin::visibleHeight() const
+{
+    return m_scrollbar ? m_scrollbar->visibleSize() : contentsSize().height();
+}
+
+int WebPopupMenuProxyWin::visibleWidth() const
+{
+    int scrollbarWidth = m_scrollbar ? m_scrollbar->frameRect().width() : 0;
+    return contentsSize().width() - scrollbarWidth;
+}
+
+WebCore::IntSize WebPopupMenuProxyWin::contentsSize() const
+{
+    return clientRect().size();
+}
+
+WebCore::IntRect WebPopupMenuProxyWin::scrollableAreaBoundingBox() const
+{
+    return m_windowRect;
+}
+
 void WebPopupMenuProxyWin::scrollTo(int offset)
 {
     ASSERT(m_scrollbar);
index b7c4d6d..1d25373 100644 (file)
@@ -61,16 +61,21 @@ private:
     WebCore::Scrollbar* scrollbar() const { return m_scrollbar.get(); }
 
     // ScrollableArea
-    virtual int scrollSize(WebCore::ScrollbarOrientation) const;
-    virtual int scrollPosition(WebCore::Scrollbar*) const;
-    virtual void setScrollOffset(const WebCore::IntPoint&);
-    virtual void invalidateScrollbarRect(WebCore::Scrollbar*, const WebCore::IntRect&);
-    virtual void invalidateScrollCornerRect(const WebCore::IntRect&) { }
-    virtual bool isActive() const { return true; }
-    virtual bool isScrollCornerVisible() const { return false; }
-    virtual WebCore::IntRect scrollCornerRect() const { return WebCore::IntRect(); }
-    virtual WebCore::Scrollbar* verticalScrollbar() const { return m_scrollbar.get(); }
-    virtual WebCore::ScrollableArea* enclosingScrollableArea() const { return 0; }
+    virtual int scrollSize(WebCore::ScrollbarOrientation) const OVERRIDE;
+    virtual int scrollPosition(WebCore::Scrollbar*) const OVERRIDE;
+    virtual void setScrollOffset(const WebCore::IntPoint&) OVERRIDE;
+    virtual void invalidateScrollbarRect(WebCore::Scrollbar*, const WebCore::IntRect&) OVERRIDE;
+    virtual void invalidateScrollCornerRect(const WebCore::IntRect&) OVERRIDE { }
+    virtual bool isActive() const OVERRIDE { return true; }
+    virtual bool isScrollCornerVisible() const OVERRIDE { return false; }
+    virtual WebCore::IntRect scrollCornerRect() const OVERRIDE { return WebCore::IntRect(); }
+    virtual WebCore::Scrollbar* verticalScrollbar() const OVERRIDE { return m_scrollbar.get(); }
+    virtual WebCore::ScrollableArea* enclosingScrollableArea() const OVERRIDE { return 0; }
+    virtual int visibleHeight() const OVERRIDE;
+    virtual int visibleWidth() const OVERRIDE;
+    virtual WebCore::IntSize contentsSize() const OVERRIDE;
+    virtual WebCore::IntRect scrollableAreaBoundingBox() const OVERRIDE;
+    virtual bool isOnActivePage() const OVERRIDE { return true; }
 
     // NOTE: This should only be called by the overriden setScrollOffset from ScrollableArea.
     void scrollTo(int offset);
index 8a7c28a..9ccd804 100644 (file)
@@ -122,30 +122,29 @@ private:
     virtual RetainPtr<PDFDocument> pdfDocumentForPrinting() const OVERRIDE { return m_pdfDocument; }
 
     // ScrollableArea methods.
-    virtual WebCore::IntRect scrollCornerRect() const;
-    virtual WebCore::ScrollableArea* enclosingScrollableArea() const;
+    virtual WebCore::IntRect scrollCornerRect() const OVERRIDE;
+    virtual WebCore::ScrollableArea* enclosingScrollableArea() const OVERRIDE;
     virtual WebCore::IntRect scrollableAreaBoundingBox() const OVERRIDE;
-    virtual void setScrollOffset(const WebCore::IntPoint&);
-    virtual int scrollSize(WebCore::ScrollbarOrientation) const;
-    virtual bool isActive() const;
-    virtual void invalidateScrollbarRect(WebCore::Scrollbar*, const WebCore::IntRect&);
-    virtual void invalidateScrollCornerRect(const WebCore::IntRect&);
-    virtual bool isScrollCornerVisible() const;
-    virtual int scrollPosition(WebCore::Scrollbar*) const;
-    virtual WebCore::IntPoint scrollPosition() const;
-    virtual WebCore::IntPoint minimumScrollPosition() const;
-    virtual WebCore::IntPoint maximumScrollPosition() const;
-    virtual int visibleHeight() const;
-    virtual int visibleWidth() const;
-    virtual WebCore::IntSize contentsSize() const;
-    virtual WebCore::Scrollbar* horizontalScrollbar() const  { return m_horizontalScrollbar.get(); }
-    virtual WebCore::Scrollbar* verticalScrollbar() const { return m_verticalScrollbar.get(); }
-    virtual bool isOnActivePage() const;
-    virtual bool shouldSuspendScrollAnimations() const { return false; } // If we return true, ScrollAnimatorMac will keep cycling a timer forever, waiting for a good time to animate.
-    virtual void scrollbarStyleChanged(int newStyle, bool forceUpdate);
-
+    virtual void setScrollOffset(const WebCore::IntPoint&) OVERRIDE;
+    virtual int scrollSize(WebCore::ScrollbarOrientation) const OVERRIDE;
+    virtual bool isActive() const OVERRIDE;
+    virtual void invalidateScrollbarRect(WebCore::Scrollbar*, const WebCore::IntRect&) OVERRIDE;
+    virtual void invalidateScrollCornerRect(const WebCore::IntRect&) OVERRIDE;
+    virtual bool isScrollCornerVisible() const OVERRIDE;
+    virtual int scrollPosition(WebCore::Scrollbar*) const OVERRIDE;
+    virtual WebCore::IntPoint scrollPosition() const OVERRIDE;
+    virtual WebCore::IntPoint minimumScrollPosition() const OVERRIDE;
+    virtual WebCore::IntPoint maximumScrollPosition() const OVERRIDE;
+    virtual int visibleHeight() const OVERRIDE;
+    virtual int visibleWidth() const OVERRIDE;
+    virtual WebCore::IntSize contentsSize() const OVERRIDE;
+    virtual WebCore::Scrollbar* horizontalScrollbar() const OVERRIDE { return m_horizontalScrollbar.get(); }
+    virtual WebCore::Scrollbar* verticalScrollbar() const OVERRIDE { return m_verticalScrollbar.get(); }
+    virtual bool isOnActivePage() const OVERRIDE;
+    virtual bool shouldSuspendScrollAnimations() const OVERRIDE { return false; } // If we return true, ScrollAnimatorMac will keep cycling a timer forever, waiting for a good time to animate.
+    virtual void scrollbarStyleChanged(int newStyle, bool forceUpdate) OVERRIDE;
     // FIXME: Implement the other conversion functions; this one is enough to get scrollbar hit testing working.
-    virtual WebCore::IntPoint convertFromContainingViewToScrollbar(const WebCore::Scrollbar*, const WebCore::IntPoint& parentPoint) const;
+    virtual WebCore::IntPoint convertFromContainingViewToScrollbar(const WebCore::Scrollbar*, const WebCore::IntPoint& parentPoint) const OVERRIDE;
 
     JSObjectRef makeJSPDFDoc(JSContextRef);
     static JSValueRef jsPDFDocPrint(JSContextRef, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception);