diff --git a/WebCore/platform/HostWindow.h b/WebCore/platform/HostWindow.h
index f08a340..d42b9d3 100644
--- a/WebCore/platform/HostWindow.h
+++ b/WebCore/platform/HostWindow.h
@@ -30,10 +30,17 @@
 
 namespace WebCore {
 
+class IntRect;
+
 class HostWindow : Noncopyable {
 public:
     HostWindow() {}
     virtual ~HostWindow() {}
+
+    // The repaint method asks the host window to repaint a rect in the window's coordinate space.  The
+    // contentChanged boolean indicates whether or not the Web page content actually changed (or if a repaint
+    // of unchanged content is being requested).
+    virtual void repaint(const IntRect&, bool contentChanged, bool immediate = false) = 0;
 };
 
 } // namespace WebCore
diff --git a/WebCore/platform/ScrollView.cpp b/WebCore/platform/ScrollView.cpp
index 441db0f..f2e8312 100644
--- a/WebCore/platform/ScrollView.cpp
+++ b/WebCore/platform/ScrollView.cpp
@@ -26,6 +26,7 @@
 #include "config.h"
 #include "ScrollView.h"
 
+#include "HostWindow.h"
 #include "PlatformMouseEvent.h"
 #include "PlatformWheelEvent.h"
 #include "Scrollbar.h"
@@ -340,6 +341,21 @@
         (*current)->frameRectsChanged();
 }
 
+void ScrollView::repaintContentRectangle(const IntRect& rect, bool now)
+{
+    if (rect.isEmpty())
+        return;
+
+    ASSERT(!parent());
+
+    if (platformWidget()) {
+        platformRepaintContentRectangle(rect, now);
+        return;
+    }
+
+    hostWindow()->repaint(contentsToWindow(rect), true, now);
+}
+
 #if !PLATFORM(MAC)
 void ScrollView::platformSetCanBlitOnScroll()
 {
@@ -381,6 +397,10 @@
 {
     return true;
 }
+
+void ScrollView::platformRepaintContentRectangle(const IntRect&, bool now)
+{
+}
 #endif
 
 }
diff --git a/WebCore/platform/ScrollView.h b/WebCore/platform/ScrollView.h
index 088a001..1adafb0 100644
--- a/WebCore/platform/ScrollView.h
+++ b/WebCore/platform/ScrollView.h
@@ -54,6 +54,7 @@
 // Port authors should wait until this refactoring is complete before attempting to implement this interface.
 namespace WebCore {
 
+class HostWindow;
 class PlatformWheelEvent;
 class Scrollbar;
 
@@ -62,6 +63,10 @@
     ScrollView();
     ~ScrollView();
 
+    // The window thats hosts the ScrollView.  The ScrollView will communicate scrolls and repaints to the
+    // host window in the window's coordinate space.
+    virtual HostWindow* hostWindow() const = 0;
+
     // Methods for child manipulation and inspection.
     const HashSet<Widget*>* children() const { return &m_children; }
     void addChild(Widget*);
@@ -180,7 +185,7 @@
 #endif
 
 protected:
-    void updateContents(const IntRect&, bool now = false);
+    virtual void repaintContentRectangle(const IntRect&, bool now = false);
     void updateWindowRect(const IntRect&, bool now = false);
 public:
     void update();
@@ -212,7 +217,8 @@
     void platformSetScrollPosition(const IntPoint&);
     bool platformScroll(ScrollDirection, ScrollGranularity);
     void platformSetScrollbarsSuppressed(bool repaintOnUnsuppress);
-    
+    void platformRepaintContentRectangle(const IntRect&, bool now);
+
 #if PLATFORM(MAC) && defined __OBJC__
 public:
     NSView* documentView() const;
diff --git a/WebCore/platform/gtk/ScrollViewGtk.cpp b/WebCore/platform/gtk/ScrollViewGtk.cpp
index ee6d3f4..2ff822a 100644
--- a/WebCore/platform/gtk/ScrollViewGtk.cpp
+++ b/WebCore/platform/gtk/ScrollViewGtk.cpp
@@ -285,28 +285,6 @@
     updateScrollbars(m_scrollOffset);
 }
 
-void ScrollView::updateContents(const IntRect& updateRect, bool now)
-{
-    if (updateRect.isEmpty())
-        return;
-
-    IntPoint windowPoint = contentsToWindow(updateRect.location());
-    IntRect containingWindowRect = updateRect;
-    containingWindowRect.setLocation(windowPoint);
-
-    GdkRectangle rect = containingWindowRect;
-    GdkWindow* window = GTK_WIDGET(containingWindow())->window;
-
-    if (window)
-        gdk_window_invalidate_rect(window, &rect, true);
-
-    // Cache the dirty spot.
-    addToDirtyRegion(containingWindowRect);
-
-    if (now && window)
-        gdk_window_process_updates(window, true);
-}
-
 void ScrollView::update()
 {
     ASSERT(containingWindow());
diff --git a/WebCore/platform/mac/ScrollViewMac.mm b/WebCore/platform/mac/ScrollViewMac.mm
index de4f487..4019acd 100644
--- a/WebCore/platform/mac/ScrollViewMac.mm
+++ b/WebCore/platform/mac/ScrollViewMac.mm
@@ -156,13 +156,17 @@
     return true;
 }
 
-void ScrollView::updateContents(const IntRect& rect, bool now)
+void ScrollView::platformRepaintContentRectangle(const IntRect& rect, bool now)
 {
     BEGIN_BLOCK_OBJC_EXCEPTIONS;
 
     NSView *view = documentView();
     NSRect visibleRect = visibleContentRect();
 
+    // FIXME: I don't think this intersection is necessary any more now that
+    // selection doesn't call this method directly (but has to go through FrameView's
+    // repaintContentRectangle, which does the intersection test also).  Leaving it in
+    // for now until I'm sure.
     // Checking for rect visibility is an important optimization for the case of
     // Select All of a large document. AppKit does not do this check, and so ends
     // up building a large complicated NSRegion if we don't perform the check.
diff --git a/WebCore/platform/qt/ScrollViewQt.cpp b/WebCore/platform/qt/ScrollViewQt.cpp
index c9db167..836974e 100644
--- a/WebCore/platform/qt/ScrollViewQt.cpp
+++ b/WebCore/platform/qt/ScrollViewQt.cpp
@@ -180,22 +180,6 @@
     delete m_data;
 }
 
-void ScrollView::updateContents(const IntRect& rect, bool now)
-{
-    if (rect.isEmpty())
-        return;
-
-    IntPoint windowPoint = contentsToWindow(rect.location());
-    IntRect containingWindowRect = rect;
-    containingWindowRect.setLocation(windowPoint);
-
-    // Cache the dirty spot.
-    addToDirtyRegion(containingWindowRect);
-
-    if (now)
-        updateBackingStore();
-}
-
 void ScrollView::update()
 {
     QWidget* native = platformWidget();
diff --git a/WebCore/platform/win/ScrollViewWin.cpp b/WebCore/platform/win/ScrollViewWin.cpp
index 33af8a1..a2396e1 100644
--- a/WebCore/platform/win/ScrollViewWin.cpp
+++ b/WebCore/platform/win/ScrollViewWin.cpp
@@ -201,18 +201,6 @@
 {
 }
 
-void ScrollView::updateContents(const IntRect& rect, bool now)
-{
-    if (rect.isEmpty())
-        return;
-
-    IntPoint windowPoint = contentsToWindow(rect.location());
-    IntRect containingWindowRect = rect;
-    containingWindowRect.setLocation(windowPoint);
-
-    updateWindowRect(containingWindowRect, now);
-}
-
 void ScrollView::updateWindowRect(const IntRect& rect, bool now)
 {
     RECT containingWindowRectWin = rect;
diff --git a/WebCore/platform/wx/ScrollViewWx.cpp b/WebCore/platform/wx/ScrollViewWx.cpp
index d789a11..fc5e798 100644
--- a/WebCore/platform/wx/ScrollViewWx.cpp
+++ b/WebCore/platform/wx/ScrollViewWx.cpp
@@ -137,7 +137,7 @@
     delete m_data;
 }
 
-void ScrollView::updateContents(const IntRect& updateRect, bool now)
+void ScrollView::platformRepaintContentRectangle(const IntRect& updateRect, bool now)
 {
     // we need to convert coordinates to scrolled position
     wxRect contentsRect = updateRect;
