OLD | NEW |
1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "core/dom/Range.h" | 5 #include "core/dom/Range.h" |
6 #include "core/frame/FrameView.h" | 6 #include "core/frame/FrameView.h" |
7 #include "core/input/EventHandler.h" | 7 #include "core/input/EventHandler.h" |
8 #include "core/page/ChromeClient.h" | 8 #include "core/page/ChromeClient.h" |
9 #include "core/page/ContextMenuController.h" | 9 #include "core/page/ContextMenuController.h" |
10 #include "core/page/FocusController.h" | 10 #include "core/page/FocusController.h" |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
120 }; | 120 }; |
121 | 121 |
122 class LinkSelectionTest : public LinkSelectionTestBase { | 122 class LinkSelectionTest : public LinkSelectionTestBase { |
123 protected: | 123 protected: |
124 void SetUp() override { | 124 void SetUp() override { |
125 const char* const kHTMLString = | 125 const char* const kHTMLString = |
126 "<a id='link' href='foo.com' style='font-size:20pt'>Text to select " | 126 "<a id='link' href='foo.com' style='font-size:20pt'>Text to select " |
127 "foobar</a>" | 127 "foobar</a>" |
128 "<div id='page_text'>Lorem ipsum dolor sit amet</div>"; | 128 "<div id='page_text'>Lorem ipsum dolor sit amet</div>"; |
129 | 129 |
130 // We need to set deviceSupportsMouse setting to true and page's focus contr
oller to active | 130 // We need to set deviceSupportsMouse setting to true and page's focus |
131 // so that FrameView can set the mouse cursor. | 131 // controller to active so that FrameView can set the mouse cursor. |
132 m_webView = m_helper.initialize( | 132 m_webView = m_helper.initialize( |
133 false, &m_testFrameClient, nullptr, nullptr, | 133 false, &m_testFrameClient, nullptr, nullptr, |
134 [](WebSettings* settings) { settings->setDeviceSupportsMouse(true); }); | 134 [](WebSettings* settings) { settings->setDeviceSupportsMouse(true); }); |
135 m_mainFrame = m_webView->mainFrameImpl(); | 135 m_mainFrame = m_webView->mainFrameImpl(); |
136 FrameTestHelpers::loadHTMLString( | 136 FrameTestHelpers::loadHTMLString( |
137 m_mainFrame, kHTMLString, URLTestHelpers::toKURL("http://foobar.com")); | 137 m_mainFrame, kHTMLString, URLTestHelpers::toKURL("http://foobar.com")); |
138 m_webView->resize(WebSize(800, 600)); | 138 m_webView->resize(WebSize(800, 600)); |
139 m_webView->page()->focusController().setActive(true); | 139 m_webView->page()->focusController().setActive(true); |
140 | 140 |
141 auto* document = m_mainFrame->frame()->document(); | 141 auto* document = m_mainFrame->frame()->document(); |
142 ASSERT_NE(nullptr, document); | 142 ASSERT_NE(nullptr, document); |
143 auto* linkToSelect = document->getElementById("link")->firstChild(); | 143 auto* linkToSelect = document->getElementById("link")->firstChild(); |
144 ASSERT_NE(nullptr, linkToSelect); | 144 ASSERT_NE(nullptr, linkToSelect); |
145 // We get larger range that we actually want to select, because we need a sl
ightly larger | 145 // We get larger range that we actually want to select, because we need a |
146 // rect to include the last character to the selection. | 146 // slightly larger rect to include the last character to the selection. |
147 const auto rangeToSelect = | 147 const auto rangeToSelect = |
148 Range::create(*document, linkToSelect, 5, linkToSelect, 16); | 148 Range::create(*document, linkToSelect, 5, linkToSelect, 16); |
149 | 149 |
150 const auto& selectionRect = rangeToSelect->boundingBox(); | 150 const auto& selectionRect = rangeToSelect->boundingBox(); |
151 const auto& selectionRectCenterY = selectionRect.center().y(); | 151 const auto& selectionRectCenterY = selectionRect.center().y(); |
152 m_leftPointInLink = selectionRect.minXMinYCorner(); | 152 m_leftPointInLink = selectionRect.minXMinYCorner(); |
153 m_leftPointInLink.setY(selectionRectCenterY); | 153 m_leftPointInLink.setY(selectionRectCenterY); |
154 | 154 |
155 m_rightPointInLink = selectionRect.maxXMinYCorner(); | 155 m_rightPointInLink = selectionRect.maxXMinYCorner(); |
156 m_rightPointInLink.setY(selectionRectCenterY); | 156 m_rightPointInLink.setY(selectionRectCenterY); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
189 testing::runDelayedTasks(50); | 189 testing::runDelayedTasks(50); |
190 const auto& cursor = | 190 const auto& cursor = |
191 m_mainFrame->frame()->chromeClient().lastSetCursorForTesting(); | 191 m_mainFrame->frame()->chromeClient().lastSetCursorForTesting(); |
192 EXPECT_EQ(Cursor::IBeam, cursor.getType()); | 192 EXPECT_EQ(Cursor::IBeam, cursor.getType()); |
193 } | 193 } |
194 | 194 |
195 TEST_F(LinkSelectionTest, HandCursorOverLinkAfterContextMenu) { | 195 TEST_F(LinkSelectionTest, HandCursorOverLinkAfterContextMenu) { |
196 // Move mouse. | 196 // Move mouse. |
197 emulateMouseDrag(m_rightPointInLink, m_leftPointInLink, 0, 0); | 197 emulateMouseDrag(m_rightPointInLink, m_leftPointInLink, 0, 0); |
198 | 198 |
199 // Show context menu. We don't send mouseup event here since in browser it doe
sn't reach | 199 // Show context menu. We don't send mouseup event here since in browser it |
200 // blink because of shown context menu. | 200 // doesn't reach blink because of shown context menu. |
201 emulateMouseDown(m_leftPointInLink, WebMouseEvent::Button::Right, 0, 1); | 201 emulateMouseDown(m_leftPointInLink, WebMouseEvent::Button::Right, 0, 1); |
202 | 202 |
203 LocalFrame* frame = m_mainFrame->frame(); | 203 LocalFrame* frame = m_mainFrame->frame(); |
204 // Hide context menu. | 204 // Hide context menu. |
205 frame->page()->contextMenuController().clearContextMenu(); | 205 frame->page()->contextMenuController().clearContextMenu(); |
206 | 206 |
207 frame->localFrameRoot()->eventHandler().scheduleCursorUpdate(); | 207 frame->localFrameRoot()->eventHandler().scheduleCursorUpdate(); |
208 testing::runDelayedTasks(50); | 208 testing::runDelayedTasks(50); |
209 const auto& cursor = | 209 const auto& cursor = |
210 m_mainFrame->frame()->chromeClient().lastSetCursorForTesting(); | 210 m_mainFrame->frame()->chromeClient().lastSetCursorForTesting(); |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 checkMouseClicks(*element, false); | 327 checkMouseClicks(*element, false); |
328 } | 328 } |
329 | 329 |
330 { | 330 { |
331 SCOPED_TRACE("Text div, double click"); | 331 SCOPED_TRACE("Text div, double click"); |
332 checkMouseClicks(*element, true); | 332 checkMouseClicks(*element, true); |
333 } | 333 } |
334 } | 334 } |
335 | 335 |
336 } // namespace blink | 336 } // namespace blink |
OLD | NEW |