Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(409)

Side by Side Diff: third_party/WebKit/Source/web/tests/WebFrameTest.cpp

Issue 2668133003: Change hover element to scrollbar's parent when hit test contains scrollbar (Closed)
Patch Set: use non-overlay-scrollbar Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2010 Google Inc. All rights reserved. 2 * Copyright (C) 2010 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 10815 matching lines...) Expand 10 before | Expand all | Expand 10 after
10826 document->frame()->eventHandler().handleMouseMoveEvent( 10826 document->frame()->eventHandler().handleMouseMoveEvent(
10827 mouseMoveEvent, Vector<WebMouseEvent>()); 10827 mouseMoveEvent, Vector<WebMouseEvent>());
10828 10828
10829 EXPECT_EQ(document->hoverNode(), 10829 EXPECT_EQ(document->hoverNode(),
10830 document->frame()->chromeClient().lastSetTooltipNodeForTesting()); 10830 document->frame()->chromeClient().lastSetTooltipNodeForTesting());
10831 EXPECT_EQ(div2Tag, 10831 EXPECT_EQ(div2Tag,
10832 document->frame()->chromeClient().lastSetTooltipNodeForTesting()); 10832 document->frame()->chromeClient().lastSetTooltipNodeForTesting());
10833 } 10833 }
10834 10834
10835 // Makes sure that mouse hover over an overlay scrollbar doesn't activate 10835 // Makes sure that mouse hover over an overlay scrollbar doesn't activate
10836 // elements below unless the scrollbar is faded out. 10836 // elements below(except the Element that owns the scrollbar) unless the
10837 // scrollbar is faded out.
10837 TEST_F(WebFrameTest, MouseOverLinkAndOverlayScrollbar) { 10838 TEST_F(WebFrameTest, MouseOverLinkAndOverlayScrollbar) {
10838 FrameTestHelpers::WebViewHelper webViewHelper; 10839 FrameTestHelpers::WebViewHelper webViewHelper;
10839 webViewHelper.initialize(true, nullptr, nullptr, nullptr, 10840 webViewHelper.initialize(true, nullptr, nullptr, nullptr,
10840 [](WebSettings* settings) {}); 10841 [](WebSettings* settings) {});
10841 webViewHelper.resize(WebSize(20, 20)); 10842 webViewHelper.resize(WebSize(20, 20));
10842 WebViewImpl* webView = webViewHelper.webView(); 10843 WebViewImpl* webView = webViewHelper.webView();
10843 10844
10844 initializeWithHTML(*webView->mainFrameImpl()->frame(), 10845 initializeWithHTML(*webView->mainFrameImpl()->frame(),
10845 "<!DOCTYPE html>" 10846 "<!DOCTYPE html>"
10846 "<a id='a' href='javascript:void(0);'>" 10847 "<a id='a' href='javascript:void(0);'>"
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
10988 TimeTicks::Now().InSeconds()); 10989 TimeTicks::Now().InSeconds());
10989 mouseMoveOverDivAndScrollbar.setFrameScale(1); 10990 mouseMoveOverDivAndScrollbar.setFrameScale(1);
10990 document->frame()->eventHandler().handleMouseMoveEvent( 10991 document->frame()->eventHandler().handleMouseMoveEvent(
10991 mouseMoveOverDivAndScrollbar, Vector<WebMouseEvent>()); 10992 mouseMoveOverDivAndScrollbar, Vector<WebMouseEvent>());
10992 10993
10993 // Custom not change the DIV :hover 10994 // Custom not change the DIV :hover
10994 EXPECT_EQ(document->hoverNode(), scrollbarDiv); 10995 EXPECT_EQ(document->hoverNode(), scrollbarDiv);
10995 EXPECT_EQ(hitTestResult.scrollbar()->hoveredPart(), ScrollbarPart::ThumbPart); 10996 EXPECT_EQ(hitTestResult.scrollbar()->hoveredPart(), ScrollbarPart::ThumbPart);
10996 } 10997 }
10997 10998
10999 // Makes sure that mouse hover over a scrollbar also hover the element owns the
11000 // scrollbar.
11001 TEST_F(WebFrameTest, MouseOverScrollbarAndParentElement) {
11002 registerMockedHttpURLLoad("scrollbar-and-element-hover.html");
11003 FrameTestHelpers::WebViewHelper webViewHelper;
11004 RuntimeEnabledFeatures::setOverlayScrollbarsEnabled(false);
11005 WebViewImpl* webView = webViewHelper.initializeAndLoad(
11006 m_baseURL + "scrollbar-and-element-hover.html");
11007
11008 webViewHelper.resize(WebSize(200, 200));
11009
11010 webView->updateAllLifecyclePhases();
11011
11012 Document* document = toLocalFrame(webView->page()->mainFrame())->document();
11013
11014 Element* parentDiv = document->getElementById("parent");
11015 Element* childDiv = document->getElementById("child");
11016 EXPECT_TRUE(parentDiv);
11017 EXPECT_TRUE(childDiv);
11018
11019 ScrollableArea* scrollableArea =
11020 toLayoutBox(parentDiv->layoutObject())->getScrollableArea();
11021
11022 EXPECT_TRUE(scrollableArea->verticalScrollbar());
11023 EXPECT_FALSE(scrollableArea->verticalScrollbar()->isOverlayScrollbar());
11024 EXPECT_TRUE(scrollableArea->verticalScrollbar()->theme().isMockTheme());
11025
11026 // Ensure hittest only has DIV.
11027 HitTestResult hitTestResult = webView->coreHitTestResultAt(WebPoint(1, 1));
11028
11029 EXPECT_TRUE(hitTestResult.innerElement());
11030 EXPECT_FALSE(hitTestResult.scrollbar());
11031
11032 // Mouse over DIV.
11033 WebMouseEvent mouseMoveOverDiv(
11034 WebInputEvent::MouseMove, WebFloatPoint(1, 1), WebFloatPoint(1, 1),
11035 WebPointerProperties::Button::NoButton, 0, WebInputEvent::NoModifiers,
11036 TimeTicks::Now().InSeconds());
11037 mouseMoveOverDiv.setFrameScale(1);
11038 document->frame()->eventHandler().handleMouseMoveEvent(
11039 mouseMoveOverDiv, Vector<WebMouseEvent>());
11040
11041 // DIV :hover.
11042 EXPECT_EQ(document->hoverNode(), parentDiv);
11043
11044 // Ensure hittest has DIV and scrollbar.
11045 hitTestResult = webView->coreHitTestResultAt(WebPoint(175, 5));
11046
11047 EXPECT_TRUE(hitTestResult.innerElement());
11048 EXPECT_TRUE(hitTestResult.scrollbar());
11049 EXPECT_FALSE(hitTestResult.scrollbar()->isCustomScrollbar());
11050 EXPECT_TRUE(hitTestResult.scrollbar()->enabled());
11051
11052 // Mouse over scrollbar.
11053 WebMouseEvent mouseMoveOverDivAndScrollbar(
11054 WebInputEvent::MouseMove, WebFloatPoint(175, 5), WebFloatPoint(175, 5),
11055 WebPointerProperties::Button::NoButton, 0, WebInputEvent::NoModifiers,
11056 TimeTicks::Now().InSeconds());
11057 mouseMoveOverDivAndScrollbar.setFrameScale(1);
11058 document->frame()->eventHandler().handleMouseMoveEvent(
11059 mouseMoveOverDivAndScrollbar, Vector<WebMouseEvent>());
11060
11061 // Not change the DIV :hover.
11062 EXPECT_EQ(document->hoverNode(), parentDiv);
11063
11064 // Disable the Scrollbar by remove the childDiv.
11065 childDiv->remove();
11066 webView->updateAllLifecyclePhases();
11067
11068 // Ensure hittest has DIV and no scrollbar.
11069 hitTestResult = webView->coreHitTestResultAt(WebPoint(175, 5));
11070
11071 EXPECT_TRUE(hitTestResult.innerElement());
11072 EXPECT_TRUE(hitTestResult.scrollbar());
11073 EXPECT_FALSE(hitTestResult.scrollbar()->enabled());
11074 EXPECT_EQ(hitTestResult.innerElement()->clientWidth(), 165);
bokan 2017/02/03 19:17:22 Check instead that the clientWidth is < 180 so tha
11075
11076 // Mouse over disabled scrollbar.
11077 document->frame()->eventHandler().handleMouseMoveEvent(
11078 mouseMoveOverDivAndScrollbar, Vector<WebMouseEvent>());
11079
11080 // Not change the DIV :hover.
11081 EXPECT_EQ(document->hoverNode(), parentDiv);
11082 }
11083
10998 TEST_F(WebFrameTest, MouseReleaseUpdatesScrollbarHoveredPart) { 11084 TEST_F(WebFrameTest, MouseReleaseUpdatesScrollbarHoveredPart) {
10999 registerMockedHttpURLLoad("custom-scrollbar-hover.html"); 11085 registerMockedHttpURLLoad("custom-scrollbar-hover.html");
11000 FrameTestHelpers::WebViewHelper webViewHelper; 11086 FrameTestHelpers::WebViewHelper webViewHelper;
11001 WebViewImpl* webView = webViewHelper.initializeAndLoad( 11087 WebViewImpl* webView = webViewHelper.initializeAndLoad(
11002 m_baseURL + "custom-scrollbar-hover.html"); 11088 m_baseURL + "custom-scrollbar-hover.html");
11003 11089
11004 webViewHelper.resize(WebSize(200, 200)); 11090 webViewHelper.resize(WebSize(200, 200));
11005 11091
11006 webView->updateAllLifecyclePhases(); 11092 webView->updateAllLifecyclePhases();
11007 11093
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
11257 11343
11258 EXPECT_TRUE(mainFrameClient.childClient().didCallFrameDetached()); 11344 EXPECT_TRUE(mainFrameClient.childClient().didCallFrameDetached());
11259 EXPECT_TRUE(mainFrameClient.childClient().didCallDidStopLoading()); 11345 EXPECT_TRUE(mainFrameClient.childClient().didCallDidStopLoading());
11260 EXPECT_TRUE(mainFrameClient.childClient().didCallDidFinishDocumentLoad()); 11346 EXPECT_TRUE(mainFrameClient.childClient().didCallDidFinishDocumentLoad());
11261 EXPECT_TRUE(mainFrameClient.childClient().didCallDidHandleOnloadEvents()); 11347 EXPECT_TRUE(mainFrameClient.childClient().didCallDidHandleOnloadEvents());
11262 11348
11263 webViewHelper.reset(); 11349 webViewHelper.reset();
11264 } 11350 }
11265 11351
11266 } // namespace blink 11352 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698