| Index: third_party/WebKit/Source/web/tests/WebFrameTest.cpp
 | 
| diff --git a/third_party/WebKit/Source/web/tests/WebFrameTest.cpp b/third_party/WebKit/Source/web/tests/WebFrameTest.cpp
 | 
| index 8f1bb9588eb52550529187a62bcde2f06707ea97..7001195f4ed67863a9e314e9c5d287db1d712485 100644
 | 
| --- a/third_party/WebKit/Source/web/tests/WebFrameTest.cpp
 | 
| +++ b/third_party/WebKit/Source/web/tests/WebFrameTest.cpp
 | 
| @@ -10833,7 +10833,8 @@ TEST_F(WebFrameTest, MouseOverDifferntNodeClearsTooltip) {
 | 
|  }
 | 
|  
 | 
|  // Makes sure that mouse hover over an overlay scrollbar doesn't activate
 | 
| -// elements below unless the scrollbar is faded out.
 | 
| +// elements below(except the Element that owns the scrollbar) unless the
 | 
| +// scrollbar is faded out.
 | 
|  TEST_F(WebFrameTest, MouseOverLinkAndOverlayScrollbar) {
 | 
|    FrameTestHelpers::WebViewHelper webViewHelper;
 | 
|    webViewHelper.initialize(true, nullptr, nullptr, nullptr,
 | 
| @@ -10995,6 +10996,91 @@ TEST_F(WebFrameTest, MouseOverCustomScrollbar) {
 | 
|    EXPECT_EQ(hitTestResult.scrollbar()->hoveredPart(), ScrollbarPart::ThumbPart);
 | 
|  }
 | 
|  
 | 
| +// Makes sure that mouse hover over a scrollbar also hover the element owns the
 | 
| +// scrollbar.
 | 
| +TEST_F(WebFrameTest, MouseOverScrollbarAndParentElement) {
 | 
| +  registerMockedHttpURLLoad("scrollbar-and-element-hover.html");
 | 
| +  FrameTestHelpers::WebViewHelper webViewHelper;
 | 
| +  RuntimeEnabledFeatures::setOverlayScrollbarsEnabled(false);
 | 
| +  WebViewImpl* webView = webViewHelper.initializeAndLoad(
 | 
| +      m_baseURL + "scrollbar-and-element-hover.html");
 | 
| +
 | 
| +  webViewHelper.resize(WebSize(200, 200));
 | 
| +
 | 
| +  webView->updateAllLifecyclePhases();
 | 
| +
 | 
| +  Document* document = toLocalFrame(webView->page()->mainFrame())->document();
 | 
| +
 | 
| +  Element* parentDiv = document->getElementById("parent");
 | 
| +  Element* childDiv = document->getElementById("child");
 | 
| +  EXPECT_TRUE(parentDiv);
 | 
| +  EXPECT_TRUE(childDiv);
 | 
| +
 | 
| +  ScrollableArea* scrollableArea =
 | 
| +      toLayoutBox(parentDiv->layoutObject())->getScrollableArea();
 | 
| +
 | 
| +  EXPECT_TRUE(scrollableArea->verticalScrollbar());
 | 
| +  EXPECT_FALSE(scrollableArea->verticalScrollbar()->isOverlayScrollbar());
 | 
| +  EXPECT_TRUE(scrollableArea->verticalScrollbar()->theme().isMockTheme());
 | 
| +
 | 
| +  // Ensure hittest only has DIV.
 | 
| +  HitTestResult hitTestResult = webView->coreHitTestResultAt(WebPoint(1, 1));
 | 
| +
 | 
| +  EXPECT_TRUE(hitTestResult.innerElement());
 | 
| +  EXPECT_FALSE(hitTestResult.scrollbar());
 | 
| +
 | 
| +  // Mouse over DIV.
 | 
| +  WebMouseEvent mouseMoveOverDiv(
 | 
| +      WebInputEvent::MouseMove, WebFloatPoint(1, 1), WebFloatPoint(1, 1),
 | 
| +      WebPointerProperties::Button::NoButton, 0, WebInputEvent::NoModifiers,
 | 
| +      TimeTicks::Now().InSeconds());
 | 
| +  mouseMoveOverDiv.setFrameScale(1);
 | 
| +  document->frame()->eventHandler().handleMouseMoveEvent(
 | 
| +      mouseMoveOverDiv, Vector<WebMouseEvent>());
 | 
| +
 | 
| +  // DIV :hover.
 | 
| +  EXPECT_EQ(document->hoverNode(), parentDiv);
 | 
| +
 | 
| +  // Ensure hittest has DIV and scrollbar.
 | 
| +  hitTestResult = webView->coreHitTestResultAt(WebPoint(175, 5));
 | 
| +
 | 
| +  EXPECT_TRUE(hitTestResult.innerElement());
 | 
| +  EXPECT_TRUE(hitTestResult.scrollbar());
 | 
| +  EXPECT_FALSE(hitTestResult.scrollbar()->isCustomScrollbar());
 | 
| +  EXPECT_TRUE(hitTestResult.scrollbar()->enabled());
 | 
| +
 | 
| +  // Mouse over scrollbar.
 | 
| +  WebMouseEvent mouseMoveOverDivAndScrollbar(
 | 
| +      WebInputEvent::MouseMove, WebFloatPoint(175, 5), WebFloatPoint(175, 5),
 | 
| +      WebPointerProperties::Button::NoButton, 0, WebInputEvent::NoModifiers,
 | 
| +      TimeTicks::Now().InSeconds());
 | 
| +  mouseMoveOverDivAndScrollbar.setFrameScale(1);
 | 
| +  document->frame()->eventHandler().handleMouseMoveEvent(
 | 
| +      mouseMoveOverDivAndScrollbar, Vector<WebMouseEvent>());
 | 
| +
 | 
| +  // Not change the DIV :hover.
 | 
| +  EXPECT_EQ(document->hoverNode(), parentDiv);
 | 
| +
 | 
| +  // Disable the Scrollbar by remove the childDiv.
 | 
| +  childDiv->remove();
 | 
| +  webView->updateAllLifecyclePhases();
 | 
| +
 | 
| +  // Ensure hittest has DIV and no scrollbar.
 | 
| +  hitTestResult = webView->coreHitTestResultAt(WebPoint(175, 5));
 | 
| +
 | 
| +  EXPECT_TRUE(hitTestResult.innerElement());
 | 
| +  EXPECT_TRUE(hitTestResult.scrollbar());
 | 
| +  EXPECT_FALSE(hitTestResult.scrollbar()->enabled());
 | 
| +  EXPECT_LT(hitTestResult.innerElement()->clientWidth(), 180);
 | 
| +
 | 
| +  // Mouse over disabled scrollbar.
 | 
| +  document->frame()->eventHandler().handleMouseMoveEvent(
 | 
| +      mouseMoveOverDivAndScrollbar, Vector<WebMouseEvent>());
 | 
| +
 | 
| +  // Not change the DIV :hover.
 | 
| +  EXPECT_EQ(document->hoverNode(), parentDiv);
 | 
| +}
 | 
| +
 | 
|  TEST_F(WebFrameTest, MouseReleaseUpdatesScrollbarHoveredPart) {
 | 
|    registerMockedHttpURLLoad("custom-scrollbar-hover.html");
 | 
|    FrameTestHelpers::WebViewHelper webViewHelper;
 | 
| 
 |