Chromium Code Reviews| 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 d123a03ceffb17247de312433aaba890b5e7b4b9..9952bf9943cf6d20a9da217b88e860e6963f4a73 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,92 @@ 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; |
| + WebViewImpl* webView = webViewHelper.initializeAndLoad( |
| + m_baseURL + "scrollbar-and-element-hover.html", true); |
| + |
| + webViewHelper.resize(WebSize(200, 200)); |
| + |
| + webView->updateAllLifecyclePhases(); |
| + |
| + WebLocalFrameImpl* frame = webViewHelper.webView()->mainFrameImpl(); |
| + Document* document = toLocalFrame(webView->page()->mainFrame())->document(); |
| + |
| + Element* parentDiv = document->getElementById("parent"); |
| + EXPECT_TRUE(parentDiv); |
| + |
| + ScrollableArea* scrollableArea = |
| + toLayoutBox(parentDiv->layoutObject())->getScrollableArea(); |
| + |
| + EXPECT_TRUE(scrollableArea->verticalScrollbar()); |
| + |
| + // 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. |
| + frame->executeScript( |
| + WebScriptSource("var parent = document.getElementById('parent');" |
| + "var child = document.getElementById('child');" |
| + "parent.removeChild(child);")); |
| + webView->updateAllLifecyclePhases(); |
| + |
| + scrollableArea = toLayoutBox(parentDiv->layoutObject())->getScrollableArea(); |
|
bokan
2017/02/03 01:51:22
Do you need this? I wouldn't expect us to create a
chaopeng
2017/02/03 17:00:30
I just tried to get scrollbar with this. Removed.
|
| + |
| + EXPECT_FALSE(scrollableArea->verticalScrollbar()); |
|
chaopeng
2017/02/03 01:12:05
I tried to get the disabled scrollbar here. But I
bokan
2017/02/03 01:51:22
Interesting. I would expect us to have created a d
|
| + |
| + // Ensure hittest has DIV and no scrollbar. |
| + hitTestResult = webView->coreHitTestResultAt(WebPoint(175, 5)); |
| + |
| + EXPECT_TRUE(hitTestResult.innerElement()); |
| + EXPECT_FALSE(hitTestResult.scrollbar()); |
| + |
| + // 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; |