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

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

Issue 2787943002: [WIP] Use the flat tree for hover handling.
Patch Set: Created 3 years, 8 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
« no previous file with comments | « third_party/WebKit/Source/core/input/EventHandler.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 10785 matching lines...) Expand 10 before | Expand all | Expand 10 after
10796 WebMouseEvent mouseMoveOverLinkEvent( 10796 WebMouseEvent mouseMoveOverLinkEvent(
10797 WebInputEvent::MouseMove, 10797 WebInputEvent::MouseMove,
10798 WebFloatPoint(div1Tag->offsetLeft() + 5, div1Tag->offsetTop() + 5), 10798 WebFloatPoint(div1Tag->offsetLeft() + 5, div1Tag->offsetTop() + 5),
10799 WebFloatPoint(div1Tag->offsetLeft() + 5, div1Tag->offsetTop() + 5), 10799 WebFloatPoint(div1Tag->offsetLeft() + 5, div1Tag->offsetTop() + 5),
10800 WebPointerProperties::Button::NoButton, 0, WebInputEvent::NoModifiers, 10800 WebPointerProperties::Button::NoButton, 0, WebInputEvent::NoModifiers,
10801 TimeTicks::Now().InSeconds()); 10801 TimeTicks::Now().InSeconds());
10802 mouseMoveOverLinkEvent.setFrameScale(1); 10802 mouseMoveOverLinkEvent.setFrameScale(1);
10803 document->frame()->eventHandler().handleMouseMoveEvent( 10803 document->frame()->eventHandler().handleMouseMoveEvent(
10804 mouseMoveOverLinkEvent, Vector<WebMouseEvent>()); 10804 mouseMoveOverLinkEvent, Vector<WebMouseEvent>());
10805 10805
10806 EXPECT_EQ(document->hoverNode(), 10806 EXPECT_EQ(document->hoverElement(),
10807 document->frame()->chromeClient().lastSetTooltipNodeForTesting()); 10807 document->frame()->chromeClient().lastSetTooltipNodeForTesting());
10808 EXPECT_EQ(div1Tag, 10808 EXPECT_EQ(div1Tag,
10809 document->frame()->chromeClient().lastSetTooltipNodeForTesting()); 10809 document->frame()->chromeClient().lastSetTooltipNodeForTesting());
10810 10810
10811 Element* div2Tag = document->getElementById("div2"); 10811 Element* div2Tag = document->getElementById("div2");
10812 10812
10813 WebMouseEvent mouseMoveEvent( 10813 WebMouseEvent mouseMoveEvent(
10814 WebInputEvent::MouseMove, 10814 WebInputEvent::MouseMove,
10815 WebFloatPoint(div2Tag->offsetLeft() + 5, div2Tag->offsetTop() + 5), 10815 WebFloatPoint(div2Tag->offsetLeft() + 5, div2Tag->offsetTop() + 5),
10816 WebFloatPoint(div2Tag->offsetLeft() + 5, div2Tag->offsetTop() + 5), 10816 WebFloatPoint(div2Tag->offsetLeft() + 5, div2Tag->offsetTop() + 5),
10817 WebPointerProperties::Button::NoButton, 0, WebInputEvent::NoModifiers, 10817 WebPointerProperties::Button::NoButton, 0, WebInputEvent::NoModifiers,
10818 TimeTicks::Now().InSeconds()); 10818 TimeTicks::Now().InSeconds());
10819 mouseMoveEvent.setFrameScale(1); 10819 mouseMoveEvent.setFrameScale(1);
10820 document->frame()->eventHandler().handleMouseMoveEvent( 10820 document->frame()->eventHandler().handleMouseMoveEvent(
10821 mouseMoveEvent, Vector<WebMouseEvent>()); 10821 mouseMoveEvent, Vector<WebMouseEvent>());
10822 10822
10823 EXPECT_EQ(document->hoverNode(), 10823 EXPECT_EQ(document->hoverElement(),
10824 document->frame()->chromeClient().lastSetTooltipNodeForTesting()); 10824 document->frame()->chromeClient().lastSetTooltipNodeForTesting());
10825 EXPECT_EQ(div2Tag, 10825 EXPECT_EQ(div2Tag,
10826 document->frame()->chromeClient().lastSetTooltipNodeForTesting()); 10826 document->frame()->chromeClient().lastSetTooltipNodeForTesting());
10827 } 10827 }
10828 10828
10829 // Makes sure that mouse hover over an overlay scrollbar doesn't activate 10829 // Makes sure that mouse hover over an overlay scrollbar doesn't activate
10830 // elements below(except the Element that owns the scrollbar) unless the 10830 // elements below(except the Element that owns the scrollbar) unless the
10831 // scrollbar is faded out. 10831 // scrollbar is faded out.
10832 TEST_F(WebFrameTest, MouseOverLinkAndOverlayScrollbar) { 10832 TEST_F(WebFrameTest, MouseOverLinkAndOverlayScrollbar) {
10833 FrameTestHelpers::WebViewHelper webViewHelper; 10833 FrameTestHelpers::WebViewHelper webViewHelper;
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
10891 10891
10892 WebMouseEvent mousePressEvent( 10892 WebMouseEvent mousePressEvent(
10893 WebInputEvent::MouseDown, WebFloatPoint(18, aTag->offsetTop()), 10893 WebInputEvent::MouseDown, WebFloatPoint(18, aTag->offsetTop()),
10894 WebFloatPoint(18, aTag->offsetTop()), WebPointerProperties::Button::Left, 10894 WebFloatPoint(18, aTag->offsetTop()), WebPointerProperties::Button::Left,
10895 0, WebInputEvent::Modifiers::LeftButtonDown, 10895 0, WebInputEvent::Modifiers::LeftButtonDown,
10896 TimeTicks::Now().InSeconds()); 10896 TimeTicks::Now().InSeconds());
10897 mousePressEvent.setFrameScale(1); 10897 mousePressEvent.setFrameScale(1);
10898 document->frame()->eventHandler().handleMousePressEvent(mousePressEvent); 10898 document->frame()->eventHandler().handleMousePressEvent(mousePressEvent);
10899 10899
10900 EXPECT_FALSE(document->activeHoverElement()); 10900 EXPECT_FALSE(document->activeHoverElement());
10901 EXPECT_FALSE(document->hoverNode()); 10901 EXPECT_FALSE(document->hoverElement());
10902 10902
10903 WebMouseEvent mouseReleaseEvent( 10903 WebMouseEvent mouseReleaseEvent(
10904 WebInputEvent::MouseUp, WebFloatPoint(18, aTag->offsetTop()), 10904 WebInputEvent::MouseUp, WebFloatPoint(18, aTag->offsetTop()),
10905 WebFloatPoint(18, aTag->offsetTop()), WebPointerProperties::Button::Left, 10905 WebFloatPoint(18, aTag->offsetTop()), WebPointerProperties::Button::Left,
10906 0, WebInputEvent::Modifiers::LeftButtonDown, 10906 0, WebInputEvent::Modifiers::LeftButtonDown,
10907 TimeTicks::Now().InSeconds()); 10907 TimeTicks::Now().InSeconds());
10908 mouseReleaseEvent.setFrameScale(1); 10908 mouseReleaseEvent.setFrameScale(1);
10909 document->frame()->eventHandler().handleMouseReleaseEvent(mouseReleaseEvent); 10909 document->frame()->eventHandler().handleMouseReleaseEvent(mouseReleaseEvent);
10910 10910
10911 // Mouse over disabled overlay scrollbar. Mouse cursor should be hand and has 10911 // Mouse over disabled overlay scrollbar. Mouse cursor should be hand and has
(...skipping 10 matching lines...) Expand all
10922 document->frame()->eventHandler().handleMouseMoveEvent( 10922 document->frame()->eventHandler().handleMouseMoveEvent(
10923 mouseMoveEvent, Vector<WebMouseEvent>()); 10923 mouseMoveEvent, Vector<WebMouseEvent>());
10924 10924
10925 EXPECT_EQ( 10925 EXPECT_EQ(
10926 Cursor::Type::Hand, 10926 Cursor::Type::Hand,
10927 document->frame()->chromeClient().lastSetCursorForTesting().getType()); 10927 document->frame()->chromeClient().lastSetCursorForTesting().getType());
10928 10928
10929 document->frame()->eventHandler().handleMousePressEvent(mousePressEvent); 10929 document->frame()->eventHandler().handleMousePressEvent(mousePressEvent);
10930 10930
10931 EXPECT_TRUE(document->activeHoverElement()); 10931 EXPECT_TRUE(document->activeHoverElement());
10932 EXPECT_TRUE(document->hoverNode()); 10932 EXPECT_TRUE(document->hoverElement());
10933 10933
10934 document->frame()->eventHandler().handleMouseReleaseEvent(mouseReleaseEvent); 10934 document->frame()->eventHandler().handleMouseReleaseEvent(mouseReleaseEvent);
10935 } 10935 }
10936 10936
10937 // Makes sure that mouse hover over an custom scrollbar doesn't change the 10937 // Makes sure that mouse hover over an custom scrollbar doesn't change the
10938 // activate elements. 10938 // activate elements.
10939 TEST_F(WebFrameTest, MouseOverCustomScrollbar) { 10939 TEST_F(WebFrameTest, MouseOverCustomScrollbar) {
10940 registerMockedHttpURLLoad("custom-scrollbar-hover.html"); 10940 registerMockedHttpURLLoad("custom-scrollbar-hover.html");
10941 FrameTestHelpers::WebViewHelper webViewHelper; 10941 FrameTestHelpers::WebViewHelper webViewHelper;
10942 WebViewImpl* webView = webViewHelper.initializeAndLoad( 10942 WebViewImpl* webView = webViewHelper.initializeAndLoad(
(...skipping 17 matching lines...) Expand all
10960 // Mouse over DIV 10960 // Mouse over DIV
10961 WebMouseEvent mouseMoveOverDiv( 10961 WebMouseEvent mouseMoveOverDiv(
10962 WebInputEvent::MouseMove, WebFloatPoint(1, 1), WebFloatPoint(1, 1), 10962 WebInputEvent::MouseMove, WebFloatPoint(1, 1), WebFloatPoint(1, 1),
10963 WebPointerProperties::Button::NoButton, 0, WebInputEvent::NoModifiers, 10963 WebPointerProperties::Button::NoButton, 0, WebInputEvent::NoModifiers,
10964 TimeTicks::Now().InSeconds()); 10964 TimeTicks::Now().InSeconds());
10965 mouseMoveOverDiv.setFrameScale(1); 10965 mouseMoveOverDiv.setFrameScale(1);
10966 document->frame()->eventHandler().handleMouseMoveEvent( 10966 document->frame()->eventHandler().handleMouseMoveEvent(
10967 mouseMoveOverDiv, Vector<WebMouseEvent>()); 10967 mouseMoveOverDiv, Vector<WebMouseEvent>());
10968 10968
10969 // DIV :hover 10969 // DIV :hover
10970 EXPECT_EQ(document->hoverNode(), scrollbarDiv); 10970 EXPECT_EQ(document->hoverElement(), scrollbarDiv);
10971 10971
10972 // Ensure hittest has DIV and scrollbar 10972 // Ensure hittest has DIV and scrollbar
10973 hitTestResult = webView->coreHitTestResultAt(WebPoint(175, 1)); 10973 hitTestResult = webView->coreHitTestResultAt(WebPoint(175, 1));
10974 10974
10975 EXPECT_TRUE(hitTestResult.innerElement()); 10975 EXPECT_TRUE(hitTestResult.innerElement());
10976 EXPECT_TRUE(hitTestResult.scrollbar()); 10976 EXPECT_TRUE(hitTestResult.scrollbar());
10977 EXPECT_TRUE(hitTestResult.scrollbar()->isCustomScrollbar()); 10977 EXPECT_TRUE(hitTestResult.scrollbar()->isCustomScrollbar());
10978 10978
10979 // Mouse over scrollbar 10979 // Mouse over scrollbar
10980 WebMouseEvent mouseMoveOverDivAndScrollbar( 10980 WebMouseEvent mouseMoveOverDivAndScrollbar(
10981 WebInputEvent::MouseMove, WebFloatPoint(175, 1), WebFloatPoint(175, 1), 10981 WebInputEvent::MouseMove, WebFloatPoint(175, 1), WebFloatPoint(175, 1),
10982 WebPointerProperties::Button::NoButton, 0, WebInputEvent::NoModifiers, 10982 WebPointerProperties::Button::NoButton, 0, WebInputEvent::NoModifiers,
10983 TimeTicks::Now().InSeconds()); 10983 TimeTicks::Now().InSeconds());
10984 mouseMoveOverDivAndScrollbar.setFrameScale(1); 10984 mouseMoveOverDivAndScrollbar.setFrameScale(1);
10985 document->frame()->eventHandler().handleMouseMoveEvent( 10985 document->frame()->eventHandler().handleMouseMoveEvent(
10986 mouseMoveOverDivAndScrollbar, Vector<WebMouseEvent>()); 10986 mouseMoveOverDivAndScrollbar, Vector<WebMouseEvent>());
10987 10987
10988 // Custom not change the DIV :hover 10988 // Custom not change the DIV :hover
10989 EXPECT_EQ(document->hoverNode(), scrollbarDiv); 10989 EXPECT_EQ(document->hoverElement(), scrollbarDiv);
10990 EXPECT_EQ(hitTestResult.scrollbar()->hoveredPart(), ScrollbarPart::ThumbPart); 10990 EXPECT_EQ(hitTestResult.scrollbar()->hoveredPart(), ScrollbarPart::ThumbPart);
10991 } 10991 }
10992 10992
10993 // Makes sure that mouse hover over a scrollbar also hover the element owns the 10993 // Makes sure that mouse hover over a scrollbar also hover the element owns the
10994 // scrollbar. 10994 // scrollbar.
10995 TEST_F(WebFrameTest, MouseOverScrollbarAndParentElement) { 10995 TEST_F(WebFrameTest, MouseOverScrollbarAndParentElement) {
10996 registerMockedHttpURLLoad("scrollbar-and-element-hover.html"); 10996 registerMockedHttpURLLoad("scrollbar-and-element-hover.html");
10997 FrameTestHelpers::WebViewHelper webViewHelper; 10997 FrameTestHelpers::WebViewHelper webViewHelper;
10998 RuntimeEnabledFeatures::setOverlayScrollbarsEnabled(false); 10998 RuntimeEnabledFeatures::setOverlayScrollbarsEnabled(false);
10999 WebViewImpl* webView = webViewHelper.initializeAndLoad( 10999 WebViewImpl* webView = webViewHelper.initializeAndLoad(
(...skipping 26 matching lines...) Expand all
11026 // Mouse over DIV. 11026 // Mouse over DIV.
11027 WebMouseEvent mouseMoveOverDiv( 11027 WebMouseEvent mouseMoveOverDiv(
11028 WebInputEvent::MouseMove, WebFloatPoint(1, 1), WebFloatPoint(1, 1), 11028 WebInputEvent::MouseMove, WebFloatPoint(1, 1), WebFloatPoint(1, 1),
11029 WebPointerProperties::Button::NoButton, 0, WebInputEvent::NoModifiers, 11029 WebPointerProperties::Button::NoButton, 0, WebInputEvent::NoModifiers,
11030 TimeTicks::Now().InSeconds()); 11030 TimeTicks::Now().InSeconds());
11031 mouseMoveOverDiv.setFrameScale(1); 11031 mouseMoveOverDiv.setFrameScale(1);
11032 document->frame()->eventHandler().handleMouseMoveEvent( 11032 document->frame()->eventHandler().handleMouseMoveEvent(
11033 mouseMoveOverDiv, Vector<WebMouseEvent>()); 11033 mouseMoveOverDiv, Vector<WebMouseEvent>());
11034 11034
11035 // DIV :hover. 11035 // DIV :hover.
11036 EXPECT_EQ(document->hoverNode(), parentDiv); 11036 EXPECT_EQ(document->hoverElement(), parentDiv);
11037 11037
11038 // Ensure hittest has DIV and scrollbar. 11038 // Ensure hittest has DIV and scrollbar.
11039 hitTestResult = webView->coreHitTestResultAt(WebPoint(175, 5)); 11039 hitTestResult = webView->coreHitTestResultAt(WebPoint(175, 5));
11040 11040
11041 EXPECT_TRUE(hitTestResult.innerElement()); 11041 EXPECT_TRUE(hitTestResult.innerElement());
11042 EXPECT_TRUE(hitTestResult.scrollbar()); 11042 EXPECT_TRUE(hitTestResult.scrollbar());
11043 EXPECT_FALSE(hitTestResult.scrollbar()->isCustomScrollbar()); 11043 EXPECT_FALSE(hitTestResult.scrollbar()->isCustomScrollbar());
11044 EXPECT_TRUE(hitTestResult.scrollbar()->enabled()); 11044 EXPECT_TRUE(hitTestResult.scrollbar()->enabled());
11045 11045
11046 // Mouse over scrollbar. 11046 // Mouse over scrollbar.
11047 WebMouseEvent mouseMoveOverDivAndScrollbar( 11047 WebMouseEvent mouseMoveOverDivAndScrollbar(
11048 WebInputEvent::MouseMove, WebFloatPoint(175, 5), WebFloatPoint(175, 5), 11048 WebInputEvent::MouseMove, WebFloatPoint(175, 5), WebFloatPoint(175, 5),
11049 WebPointerProperties::Button::NoButton, 0, WebInputEvent::NoModifiers, 11049 WebPointerProperties::Button::NoButton, 0, WebInputEvent::NoModifiers,
11050 TimeTicks::Now().InSeconds()); 11050 TimeTicks::Now().InSeconds());
11051 mouseMoveOverDivAndScrollbar.setFrameScale(1); 11051 mouseMoveOverDivAndScrollbar.setFrameScale(1);
11052 document->frame()->eventHandler().handleMouseMoveEvent( 11052 document->frame()->eventHandler().handleMouseMoveEvent(
11053 mouseMoveOverDivAndScrollbar, Vector<WebMouseEvent>()); 11053 mouseMoveOverDivAndScrollbar, Vector<WebMouseEvent>());
11054 11054
11055 // Not change the DIV :hover. 11055 // Not change the DIV :hover.
11056 EXPECT_EQ(document->hoverNode(), parentDiv); 11056 EXPECT_EQ(document->hoverElement(), parentDiv);
11057 11057
11058 // Disable the Scrollbar by remove the childDiv. 11058 // Disable the Scrollbar by remove the childDiv.
11059 childDiv->remove(); 11059 childDiv->remove();
11060 webView->updateAllLifecyclePhases(); 11060 webView->updateAllLifecyclePhases();
11061 11061
11062 // Ensure hittest has DIV and no scrollbar. 11062 // Ensure hittest has DIV and no scrollbar.
11063 hitTestResult = webView->coreHitTestResultAt(WebPoint(175, 5)); 11063 hitTestResult = webView->coreHitTestResultAt(WebPoint(175, 5));
11064 11064
11065 EXPECT_TRUE(hitTestResult.innerElement()); 11065 EXPECT_TRUE(hitTestResult.innerElement());
11066 EXPECT_TRUE(hitTestResult.scrollbar()); 11066 EXPECT_TRUE(hitTestResult.scrollbar());
11067 EXPECT_FALSE(hitTestResult.scrollbar()->enabled()); 11067 EXPECT_FALSE(hitTestResult.scrollbar()->enabled());
11068 EXPECT_LT(hitTestResult.innerElement()->clientWidth(), 180); 11068 EXPECT_LT(hitTestResult.innerElement()->clientWidth(), 180);
11069 11069
11070 // Mouse over disabled scrollbar. 11070 // Mouse over disabled scrollbar.
11071 document->frame()->eventHandler().handleMouseMoveEvent( 11071 document->frame()->eventHandler().handleMouseMoveEvent(
11072 mouseMoveOverDivAndScrollbar, Vector<WebMouseEvent>()); 11072 mouseMoveOverDivAndScrollbar, Vector<WebMouseEvent>());
11073 11073
11074 // Not change the DIV :hover. 11074 // Not change the DIV :hover.
11075 EXPECT_EQ(document->hoverNode(), parentDiv); 11075 EXPECT_EQ(document->hoverElement(), parentDiv);
11076 } 11076 }
11077 11077
11078 TEST_F(WebFrameTest, MouseReleaseUpdatesScrollbarHoveredPart) { 11078 TEST_F(WebFrameTest, MouseReleaseUpdatesScrollbarHoveredPart) {
11079 registerMockedHttpURLLoad("custom-scrollbar-hover.html"); 11079 registerMockedHttpURLLoad("custom-scrollbar-hover.html");
11080 FrameTestHelpers::WebViewHelper webViewHelper; 11080 FrameTestHelpers::WebViewHelper webViewHelper;
11081 WebViewImpl* webView = webViewHelper.initializeAndLoad( 11081 WebViewImpl* webView = webViewHelper.initializeAndLoad(
11082 m_baseURL + "custom-scrollbar-hover.html"); 11082 m_baseURL + "custom-scrollbar-hover.html");
11083 11083
11084 webViewHelper.resize(WebSize(200, 200)); 11084 webViewHelper.resize(WebSize(200, 200));
11085 11085
(...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after
11445 EXPECT_FALSE(testSelectAll("<textarea></textarea>")); 11445 EXPECT_FALSE(testSelectAll("<textarea></textarea>"));
11446 EXPECT_TRUE(testSelectAll("<textarea>nonempty</textarea>")); 11446 EXPECT_TRUE(testSelectAll("<textarea>nonempty</textarea>"));
11447 EXPECT_FALSE(testSelectAll("<input>")); 11447 EXPECT_FALSE(testSelectAll("<input>"));
11448 EXPECT_TRUE(testSelectAll("<input value='nonempty'>")); 11448 EXPECT_TRUE(testSelectAll("<input value='nonempty'>"));
11449 // TODO(amaralp): Empty contenteditable should not have select all enabled. 11449 // TODO(amaralp): Empty contenteditable should not have select all enabled.
11450 EXPECT_TRUE(testSelectAll("<div contenteditable></div>")); 11450 EXPECT_TRUE(testSelectAll("<div contenteditable></div>"));
11451 EXPECT_TRUE(testSelectAll("<div contenteditable>nonempty</div>")); 11451 EXPECT_TRUE(testSelectAll("<div contenteditable>nonempty</div>"));
11452 } 11452 }
11453 11453
11454 } // namespace blink 11454 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/input/EventHandler.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698