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

Side by Side Diff: Source/web/tests/LinkHighlightTest.cpp

Issue 587543004: Revert of Reduce hit test on ShowPress by moving event targeting to WebViewImpl (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « Source/web/WebViewImpl.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) 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2012 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 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 11 matching lines...) Expand all
22 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 22 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23 */ 23 */
24 24
25 #include "config.h" 25 #include "config.h"
26 26
27 #include "web/LinkHighlight.h" 27 #include "web/LinkHighlight.h"
28 28
29 #include "bindings/core/v8/ExceptionStatePlaceholder.h" 29 #include "bindings/core/v8/ExceptionStatePlaceholder.h"
30 #include "core/dom/Node.h" 30 #include "core/dom/Node.h"
31 #include "core/frame/FrameView.h" 31 #include "core/frame/FrameView.h"
32 #include "core/page/EventHandler.h"
33 #include "core/page/Page.h"
34 #include "core/page/TouchDisambiguation.h" 32 #include "core/page/TouchDisambiguation.h"
35 #include "core/testing/URLTestHelpers.h" 33 #include "core/testing/URLTestHelpers.h"
36 #include "platform/geometry/IntRect.h" 34 #include "platform/geometry/IntRect.h"
37 #include "public/platform/Platform.h" 35 #include "public/platform/Platform.h"
38 #include "public/platform/WebContentLayer.h" 36 #include "public/platform/WebContentLayer.h"
39 #include "public/platform/WebFloatPoint.h" 37 #include "public/platform/WebFloatPoint.h"
40 #include "public/platform/WebSize.h" 38 #include "public/platform/WebSize.h"
41 #include "public/platform/WebUnitTestSupport.h" 39 #include "public/platform/WebUnitTestSupport.h"
42 #include "public/web/WebFrame.h" 40 #include "public/web/WebFrame.h"
43 #include "public/web/WebFrameClient.h" 41 #include "public/web/WebFrameClient.h"
44 #include "public/web/WebInputEvent.h" 42 #include "public/web/WebInputEvent.h"
45 #include "public/web/WebViewClient.h" 43 #include "public/web/WebViewClient.h"
46 #include "web/WebInputEventConversion.h" 44 #include "web/WebInputEventConversion.h"
47 #include "web/WebLocalFrameImpl.h" 45 #include "web/WebLocalFrameImpl.h"
48 #include "web/WebViewImpl.h" 46 #include "web/WebViewImpl.h"
49 #include "web/tests/FrameTestHelpers.h" 47 #include "web/tests/FrameTestHelpers.h"
50 #include "wtf/PassOwnPtr.h" 48 #include "wtf/PassOwnPtr.h"
51 #include <gtest/gtest.h> 49 #include <gtest/gtest.h>
52 50
53 using namespace blink; 51 using namespace blink;
54 52
55 namespace { 53 namespace {
56 54
57 GestureEventWithHitTestResults getTargetedEvent(WebViewImpl* webViewImpl, WebGes tureEvent& touchEvent)
58 {
59 PlatformGestureEventBuilder platformEvent(webViewImpl->mainFrameImpl()->fram eView(), touchEvent);
60 return webViewImpl->page()->deprecatedLocalMainFrame()->eventHandler().targe tGestureEvent(platformEvent, true);
61 }
62
63 TEST(LinkHighlightTest, verifyWebViewImplIntegration) 55 TEST(LinkHighlightTest, verifyWebViewImplIntegration)
64 { 56 {
65 const std::string baseURL("http://www.test.com/"); 57 const std::string baseURL("http://www.test.com/");
66 const std::string fileName("test_touch_link_highlight.html"); 58 const std::string fileName("test_touch_link_highlight.html");
67 59
68 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(baseURL.c_s tr()), WebString::fromUTF8("test_touch_link_highlight.html")); 60 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(baseURL.c_s tr()), WebString::fromUTF8("test_touch_link_highlight.html"));
69 FrameTestHelpers::WebViewHelper webViewHelper; 61 FrameTestHelpers::WebViewHelper webViewHelper;
70 WebViewImpl* webViewImpl = webViewHelper.initializeAndLoad(baseURL + fileNam e, true); 62 WebViewImpl* webViewImpl = webViewHelper.initializeAndLoad(baseURL + fileNam e, true);
71 int pageWidth = 640; 63 int pageWidth = 640;
72 int pageHeight = 480; 64 int pageHeight = 480;
73 webViewImpl->resize(WebSize(pageWidth, pageHeight)); 65 webViewImpl->resize(WebSize(pageWidth, pageHeight));
74 webViewImpl->layout(); 66 webViewImpl->layout();
75 67
76 WebGestureEvent touchEvent; 68 WebGestureEvent touchEvent;
77 touchEvent.type = WebInputEvent::GestureShowPress; 69 touchEvent.type = WebInputEvent::GestureShowPress;
78 70
79 // The coordinates below are linked to absolute positions in the referenced .html file. 71 // The coordinates below are linked to absolute positions in the referenced .html file.
80 touchEvent.x = 20; 72 touchEvent.x = 20;
81 touchEvent.y = 20; 73 touchEvent.y = 20;
82 74
83 ASSERT_TRUE(webViewImpl->bestTapNode(getTargetedEvent(webViewImpl, touchEven t))); 75 {
76 PlatformGestureEventBuilder platformEvent(webViewImpl->mainFrameImpl()-> frameView(), touchEvent);
77 Node* touchNode = webViewImpl->bestTapNode(platformEvent);
78 ASSERT_TRUE(touchNode);
79 }
84 80
85 touchEvent.y = 40; 81 touchEvent.y = 40;
86 EXPECT_FALSE(webViewImpl->bestTapNode(getTargetedEvent(webViewImpl, touchEve nt))); 82 {
83 PlatformGestureEventBuilder platformEvent(webViewImpl->mainFrameImpl()-> frameView(), touchEvent);
84 EXPECT_FALSE(webViewImpl->bestTapNode(platformEvent));
85 }
87 86
88 touchEvent.y = 20; 87 touchEvent.y = 20;
89 // Shouldn't crash. 88 // Shouldn't crash.
90 webViewImpl->enableTapHighlightAtPoint(getTargetedEvent(webViewImpl, touchEv ent)); 89
90 {
91 PlatformGestureEventBuilder platformEvent(webViewImpl->mainFrameImpl()-> frameView(), touchEvent);
92 webViewImpl->enableTapHighlightAtPoint(platformEvent);
93 }
91 94
92 EXPECT_TRUE(webViewImpl->linkHighlight(0)); 95 EXPECT_TRUE(webViewImpl->linkHighlight(0));
93 EXPECT_TRUE(webViewImpl->linkHighlight(0)->contentLayer()); 96 EXPECT_TRUE(webViewImpl->linkHighlight(0)->contentLayer());
94 EXPECT_TRUE(webViewImpl->linkHighlight(0)->clipLayer()); 97 EXPECT_TRUE(webViewImpl->linkHighlight(0)->clipLayer());
95 98
96 // Find a target inside a scrollable div 99 // Find a target inside a scrollable div
100
97 touchEvent.y = 100; 101 touchEvent.y = 100;
98 webViewImpl->enableTapHighlightAtPoint(getTargetedEvent(webViewImpl, touchEv ent)); 102 {
103 PlatformGestureEventBuilder platformEvent(webViewImpl->mainFrameImpl()-> frameView(), touchEvent);
104 webViewImpl->enableTapHighlightAtPoint(platformEvent);
105 }
106
99 ASSERT_TRUE(webViewImpl->linkHighlight(0)); 107 ASSERT_TRUE(webViewImpl->linkHighlight(0));
100 108
101 // Don't highlight if no "hand cursor" 109 // Don't highlight if no "hand cursor"
102 touchEvent.y = 220; // An A-link with cross-hair cursor. 110 touchEvent.y = 220; // An A-link with cross-hair cursor.
103 webViewImpl->enableTapHighlightAtPoint(getTargetedEvent(webViewImpl, touchEv ent)); 111 {
112 PlatformGestureEventBuilder platformEvent(webViewImpl->mainFrameImpl()-> frameView(), touchEvent);
113 webViewImpl->enableTapHighlightAtPoint(platformEvent);
114 }
104 ASSERT_EQ(0U, webViewImpl->numLinkHighlights()); 115 ASSERT_EQ(0U, webViewImpl->numLinkHighlights());
105 116
106 touchEvent.y = 260; // A text input box. 117 touchEvent.y = 260; // A text input box.
107 webViewImpl->enableTapHighlightAtPoint(getTargetedEvent(webViewImpl, touchEv ent)); 118 {
119 PlatformGestureEventBuilder platformEvent(webViewImpl->mainFrameImpl()-> frameView(), touchEvent);
120 webViewImpl->enableTapHighlightAtPoint(platformEvent);
121 }
108 ASSERT_EQ(0U, webViewImpl->numLinkHighlights()); 122 ASSERT_EQ(0U, webViewImpl->numLinkHighlights());
109 123
110 Platform::current()->unitTestSupport()->unregisterAllMockedURLs(); 124 Platform::current()->unitTestSupport()->unregisterAllMockedURLs();
111 } 125 }
112 126
113 class FakeWebFrameClient : public WebFrameClient { 127 class FakeWebFrameClient : public WebFrameClient {
114 // To make the destructor public. 128 // To make the destructor public.
115 }; 129 };
116 130
117 class FakeCompositingWebViewClient : public FrameTestHelpers::TestWebViewClient { 131 class FakeCompositingWebViewClient : public FrameTestHelpers::TestWebViewClient {
(...skipping 19 matching lines...) Expand all
137 int pageWidth = 640; 151 int pageWidth = 640;
138 int pageHeight = 480; 152 int pageHeight = 480;
139 webViewImpl->resize(WebSize(pageWidth, pageHeight)); 153 webViewImpl->resize(WebSize(pageWidth, pageHeight));
140 webViewImpl->layout(); 154 webViewImpl->layout();
141 155
142 WebGestureEvent touchEvent; 156 WebGestureEvent touchEvent;
143 touchEvent.type = WebInputEvent::GestureShowPress; 157 touchEvent.type = WebInputEvent::GestureShowPress;
144 touchEvent.x = 20; 158 touchEvent.x = 20;
145 touchEvent.y = 20; 159 touchEvent.y = 20;
146 160
147 GestureEventWithHitTestResults targetedEvent = getTargetedEvent(webViewImpl, touchEvent); 161 PlatformGestureEventBuilder platformEvent(webViewImpl->mainFrameImpl()->fram eView(), touchEvent);
148 Node* touchNode = webViewImpl->bestTapNode(targetedEvent); 162 Node* touchNode = webViewImpl->bestTapNode(platformEvent);
149 ASSERT_TRUE(touchNode); 163 ASSERT_TRUE(touchNode);
150 164
151 webViewImpl->enableTapHighlightAtPoint(targetedEvent); 165 webViewImpl->enableTapHighlightAtPoint(platformEvent);
152 ASSERT_TRUE(webViewImpl->linkHighlight(0)); 166 ASSERT_TRUE(webViewImpl->linkHighlight(0));
153 167
154 GraphicsLayer* highlightLayer = webViewImpl->linkHighlight(0)->currentGraphi csLayerForTesting(); 168 GraphicsLayer* highlightLayer = webViewImpl->linkHighlight(0)->currentGraphi csLayerForTesting();
155 ASSERT_TRUE(highlightLayer); 169 ASSERT_TRUE(highlightLayer);
156 EXPECT_TRUE(highlightLayer->linkHighlight(0)); 170 EXPECT_TRUE(highlightLayer->linkHighlight(0));
157 171
158 touchNode->remove(IGNORE_EXCEPTION); 172 touchNode->remove(IGNORE_EXCEPTION);
159 webViewImpl->layout(); 173 webViewImpl->layout();
160 ASSERT_EQ(0U, highlightLayer->numLinkHighlights()); 174 ASSERT_EQ(0U, highlightLayer->numLinkHighlights());
161 175
(...skipping 25 matching lines...) Expand all
187 IntRect boundingBox(touchEvent.x - touchEvent.data.tap.width / 2, touchEvent .y - touchEvent.data.tap.height / 2, touchEvent.data.tap.width, touchEvent.data. tap.height); 201 IntRect boundingBox(touchEvent.x - touchEvent.data.tap.width / 2, touchEvent .y - touchEvent.data.tap.height / 2, touchEvent.data.tap.width, touchEvent.data. tap.height);
188 findGoodTouchTargets(boundingBox, webViewImpl->mainFrameImpl()->frame(), goo dTargets, highlightNodes); 202 findGoodTouchTargets(boundingBox, webViewImpl->mainFrameImpl()->frame(), goo dTargets, highlightNodes);
189 203
190 webViewImpl->enableTapHighlights(highlightNodes); 204 webViewImpl->enableTapHighlights(highlightNodes);
191 EXPECT_EQ(2U, webViewImpl->numLinkHighlights()); 205 EXPECT_EQ(2U, webViewImpl->numLinkHighlights());
192 206
193 Platform::current()->unitTestSupport()->unregisterAllMockedURLs(); 207 Platform::current()->unitTestSupport()->unregisterAllMockedURLs();
194 } 208 }
195 209
196 } // namespace 210 } // namespace
OLDNEW
« no previous file with comments | « Source/web/WebViewImpl.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698