| Index: third_party/WebKit/Source/platform/scroll/ScrollableArea.cpp
 | 
| diff --git a/third_party/WebKit/Source/platform/scroll/ScrollableArea.cpp b/third_party/WebKit/Source/platform/scroll/ScrollableArea.cpp
 | 
| index 0b3fc1a545382631c9d4b4993a3e165bcfa2e098..ae5d8e41f19e34536c1bda4be73988007efa3e4e 100644
 | 
| --- a/third_party/WebKit/Source/platform/scroll/ScrollableArea.cpp
 | 
| +++ b/third_party/WebKit/Source/platform/scroll/ScrollableArea.cpp
 | 
| @@ -44,6 +44,19 @@
 | 
|  
 | 
|  namespace blink {
 | 
|  
 | 
| +struct SameSizeAsScrollableArea {
 | 
| +  virtual ~SameSizeAsScrollableArea();
 | 
| +#if ENABLE(ASSERT)
 | 
| +  VerifyEagerFinalization verifyEager;
 | 
| +#endif
 | 
| +  Member<void*> pointer[2];
 | 
| +  unsigned bitfields : 17;
 | 
| +  IntPoint origin;
 | 
| +};
 | 
| +
 | 
| +static_assert(sizeof(ScrollableArea) == sizeof(SameSizeAsScrollableArea),
 | 
| +              "ScrollableArea should stay small");
 | 
| +
 | 
|  int ScrollableArea::pixelsPerLineStep(HostWindow* host) {
 | 
|    if (!host)
 | 
|      return kPixelsPerLineStep;
 | 
| @@ -66,20 +79,17 @@
 | 
|        m_horizontalScrollbarNeedsPaintInvalidation(false),
 | 
|        m_verticalScrollbarNeedsPaintInvalidation(false),
 | 
|        m_scrollCornerNeedsPaintInvalidation(false),
 | 
| -      m_scrollbarsHidden(false),
 | 
| -      m_scrollbarCaptured(false) {}
 | 
| +      m_scrollbarsHidden(false) {}
 | 
|  
 | 
|  ScrollableArea::~ScrollableArea() {}
 | 
|  
 | 
| -void ScrollableArea::clearScrollableArea() {
 | 
| +void ScrollableArea::clearScrollAnimators() {
 | 
|  #if OS(MACOSX)
 | 
|    if (m_scrollAnimator)
 | 
|      m_scrollAnimator->dispose();
 | 
|  #endif
 | 
|    m_scrollAnimator.clear();
 | 
|    m_programmaticScrollAnimator.clear();
 | 
| -  if (m_fadeOverlayScrollbarsTimer)
 | 
| -    m_fadeOverlayScrollbarsTimer->stop();
 | 
|  }
 | 
|  
 | 
|  ScrollAnimatorBase& ScrollableArea::scrollAnimator() const {
 | 
| @@ -322,27 +332,12 @@
 | 
|      scrollAnimator->mouseMovedInContentArea();
 | 
|  }
 | 
|  
 | 
| -void ScrollableArea::mouseEnteredScrollbar(Scrollbar& scrollbar) {
 | 
| +void ScrollableArea::mouseEnteredScrollbar(Scrollbar& scrollbar) const {
 | 
|    scrollAnimator().mouseEnteredScrollbar(scrollbar);
 | 
| -  // Restart the fade out timer.
 | 
| -  showOverlayScrollbars();
 | 
| -}
 | 
| -
 | 
| -void ScrollableArea::mouseExitedScrollbar(Scrollbar& scrollbar) {
 | 
| +}
 | 
| +
 | 
| +void ScrollableArea::mouseExitedScrollbar(Scrollbar& scrollbar) const {
 | 
|    scrollAnimator().mouseExitedScrollbar(scrollbar);
 | 
| -}
 | 
| -
 | 
| -void ScrollableArea::mouseCapturedScrollbar() {
 | 
| -  m_scrollbarCaptured = true;
 | 
| -  showOverlayScrollbars();
 | 
| -  if (m_fadeOverlayScrollbarsTimer)
 | 
| -    m_fadeOverlayScrollbarsTimer->stop();
 | 
| -}
 | 
| -
 | 
| -void ScrollableArea::mouseReleasedScrollbar() {
 | 
| -  m_scrollbarCaptured = false;
 | 
| -  // This will kick off the fade out timer.
 | 
| -  showOverlayScrollbars();
 | 
|  }
 | 
|  
 | 
|  void ScrollableArea::contentAreaDidShow() const {
 | 
| @@ -383,7 +378,6 @@
 | 
|  }
 | 
|  
 | 
|  void ScrollableArea::contentsResized() {
 | 
| -  showOverlayScrollbars();
 | 
|    if (ScrollAnimatorBase* scrollAnimator = existingScrollAnimator())
 | 
|      scrollAnimator->contentsResized();
 | 
|  }
 | 
| @@ -544,40 +538,8 @@
 | 
|  void ScrollableArea::setScrollbarsHidden(bool hidden) {
 | 
|    if (m_scrollbarsHidden == static_cast<unsigned>(hidden))
 | 
|      return;
 | 
| -
 | 
|    m_scrollbarsHidden = hidden;
 | 
| -  scrollbarVisibilityChanged();
 | 
| -}
 | 
| -
 | 
| -void ScrollableArea::fadeOverlayScrollbarsTimerFired(TimerBase*) {
 | 
| -  setScrollbarsHidden(true);
 | 
| -}
 | 
| -
 | 
| -void ScrollableArea::showOverlayScrollbars() {
 | 
| -  if (!ScrollbarTheme::theme().usesOverlayScrollbars())
 | 
| -    return;
 | 
| -
 | 
| -  setScrollbarsHidden(false);
 | 
| -
 | 
| -  const double timeUntilDisable =
 | 
| -      ScrollbarTheme::theme().overlayScrollbarFadeOutDelaySeconds() +
 | 
| -      ScrollbarTheme::theme().overlayScrollbarFadeOutDurationSeconds();
 | 
| -
 | 
| -  // If the overlay scrollbars don't fade out, don't do anything. This is the
 | 
| -  // case for the mock overlays used in tests and on Mac, where the fade-out is
 | 
| -  // animated in ScrollAnimatorMac.
 | 
| -  if (!timeUntilDisable)
 | 
| -    return;
 | 
| -
 | 
| -  if (!m_fadeOverlayScrollbarsTimer) {
 | 
| -    m_fadeOverlayScrollbarsTimer.reset(new Timer<ScrollableArea>(
 | 
| -        this, &ScrollableArea::fadeOverlayScrollbarsTimerFired));
 | 
| -  }
 | 
| -
 | 
| -  if (!m_scrollbarCaptured) {
 | 
| -    m_fadeOverlayScrollbarsTimer->startOneShot(timeUntilDisable,
 | 
| -                                               BLINK_FROM_HERE);
 | 
| -  }
 | 
| +  didChangeScrollbarsHidden();
 | 
|  }
 | 
|  
 | 
|  IntRect ScrollableArea::visibleContentRect(
 | 
| 
 |