OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/input/EventHandler.h" | 5 #include "core/input/EventHandler.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include "core/dom/Document.h" | 8 #include "core/dom/Document.h" |
9 #include "core/dom/Range.h" | 9 #include "core/dom/Range.h" |
10 #include "core/editing/Editor.h" | 10 #include "core/editing/Editor.h" |
11 #include "core/editing/FrameSelection.h" | 11 #include "core/editing/FrameSelection.h" |
12 #include "core/frame/FrameView.h" | 12 #include "core/frame/FrameView.h" |
13 #include "core/frame/LocalFrame.h" | 13 #include "core/frame/LocalFrame.h" |
14 #include "core/frame/Settings.h" | 14 #include "core/frame/Settings.h" |
15 #include "core/loader/EmptyClients.h" | 15 #include "core/loader/EmptyClients.h" |
16 #include "core/page/AutoscrollController.h" | 16 #include "core/page/AutoscrollController.h" |
17 #include "core/page/Page.h" | 17 #include "core/page/Page.h" |
18 #include "core/testing/DummyPageHolder.h" | 18 #include "core/testing/DummyPageHolder.h" |
19 #include "platform/testing/HistogramTester.h" | |
19 #include "testing/gtest/include/gtest/gtest.h" | 20 #include "testing/gtest/include/gtest/gtest.h" |
20 | 21 |
21 namespace blink { | 22 namespace blink { |
22 | 23 |
23 class EventHandlerTest : public ::testing::Test { | 24 class EventHandlerTest : public ::testing::Test { |
24 protected: | 25 protected: |
25 void SetUp() override; | 26 void SetUp() override; |
26 | 27 |
27 Page& page() const { return m_dummyPageHolder->page(); } | 28 Page& page() const { return m_dummyPageHolder->page(); } |
28 Document& document() const { return m_dummyPageHolder->document(); } | 29 Document& document() const { return m_dummyPageHolder->document(); } |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
72 WebInputEvent::NoModifiers, | 73 WebInputEvent::NoModifiers, |
73 TimeTicks::Now().InSeconds()) { | 74 TimeTicks::Now().InSeconds()) { |
74 clickCount = clickCountParam; | 75 clickCount = clickCountParam; |
75 button = buttonParam; | 76 button = buttonParam; |
76 x = globalX = position.x(); | 77 x = globalX = position.x(); |
77 y = globalY = position.y(); | 78 y = globalY = position.y(); |
78 m_frameScale = 1; | 79 m_frameScale = 1; |
79 } | 80 } |
80 }; | 81 }; |
81 | 82 |
83 class ScrollBeginEventBuilder : public WebGestureEvent { | |
84 public: | |
85 ScrollBeginEventBuilder(IntPoint position, | |
86 FloatPoint delta, | |
87 WebGestureDevice device) | |
88 : WebGestureEvent() { | |
89 m_type = WebInputEvent::GestureScrollBegin; | |
90 x = globalX = position.x(); | |
91 y = globalY = position.y(); | |
92 data.scrollBegin.deltaYHint = delta.y(); | |
93 data.scrollBegin.targetViewport = true; | |
94 sourceDevice = device; | |
95 m_frameScale = 1; | |
96 } | |
97 }; | |
98 | |
82 void EventHandlerTest::SetUp() { | 99 void EventHandlerTest::SetUp() { |
83 m_dummyPageHolder = DummyPageHolder::create(IntSize(300, 400)); | 100 m_dummyPageHolder = DummyPageHolder::create(IntSize(300, 400)); |
84 } | 101 } |
85 | 102 |
86 void EventHandlerTest::setHtmlInnerHTML(const char* htmlContent) { | 103 void EventHandlerTest::setHtmlInnerHTML(const char* htmlContent) { |
87 document().documentElement()->setInnerHTML(String::fromUTF8(htmlContent)); | 104 document().documentElement()->setInnerHTML(String::fromUTF8(htmlContent)); |
88 document().view()->updateAllLifecyclePhases(); | 105 document().view()->updateAllLifecyclePhases(); |
89 } | 106 } |
90 | 107 |
91 TEST_F(EventHandlerTest, dragSelectionAfterScroll) { | 108 TEST_F(EventHandlerTest, dragSelectionAfterScroll) { |
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
454 WebInputEvent::MouseUp, WebFloatPoint(100, 50), WebFloatPoint(200, 250), | 471 WebInputEvent::MouseUp, WebFloatPoint(100, 50), WebFloatPoint(200, 250), |
455 WebPointerProperties::Button::Left, 1, WebInputEvent::NoModifiers, | 472 WebPointerProperties::Button::Left, 1, WebInputEvent::NoModifiers, |
456 TimeTicks::Now().InSeconds()); | 473 TimeTicks::Now().InSeconds()); |
457 mouseUpEvent.setFrameScale(1); | 474 mouseUpEvent.setFrameScale(1); |
458 document().frame()->eventHandler().dragSourceEndedAt(mouseUpEvent, | 475 document().frame()->eventHandler().dragSourceEndedAt(mouseUpEvent, |
459 DragOperationNone); | 476 DragOperationNone); |
460 | 477 |
461 // This test passes if it doesn't crash. | 478 // This test passes if it doesn't crash. |
462 } | 479 } |
463 | 480 |
481 TEST_F(EventHandlerTest, | |
482 ScrollerSizeOfMainThreadScrollingHistogramRecordingTest) { | |
483 setHtmlInnerHTML( | |
484 "<style>.box { width: 100px; height: 100px; overflow: scroll;" | |
485 " opacity: 0.5; } .spacer { height: 1000px;} body {height: 1000px; }" | |
486 "</style>" | |
487 "<div class='box'><div id='content' class='spacer'></div></div>"); | |
tdresser
2017/03/28 13:30:12
I suspect this string could be made a bit easier t
yigu
2017/03/29 15:32:03
Done.
| |
488 | |
489 HistogramTester histogramTester; | |
490 | |
491 // Test wheel scroll on the box | |
492 ScrollBeginEventBuilder wheelScrollBegin( | |
493 IntPoint(50, 50), FloatPoint(0.f, 1.f), WebGestureDeviceTouchpad); | |
494 | |
495 document().frame()->eventHandler().handleGestureEvent(wheelScrollBegin); | |
496 histogramTester.expectTotalCount("Event.Scroll.ScrollerSize.OnScroll_Wheel", | |
497 1); | |
498 histogramTester.expectBucketCount("Event.Scroll.ScrollerSize.OnScroll_Wheel", | |
499 10000, 1); | |
500 | |
501 // Test touch scroll on the main frame | |
502 ScrollBeginEventBuilder touchScrollBegin( | |
503 IntPoint(200, 200), FloatPoint(0.f, 1.f), WebGestureDeviceTouchscreen); | |
504 document().frame()->eventHandler().handleGestureEvent(touchScrollBegin); | |
505 histogramTester.expectTotalCount("Event.Scroll.ScrollerSize.OnScroll_Touch", | |
506 1); | |
507 histogramTester.expectBucketCount("Event.Scroll.ScrollerSize.OnScroll_Touch", | |
508 90000, 1); | |
509 } | |
510 | |
464 class TooltipCapturingChromeClient : public EmptyChromeClient { | 511 class TooltipCapturingChromeClient : public EmptyChromeClient { |
465 public: | 512 public: |
466 TooltipCapturingChromeClient() {} | 513 TooltipCapturingChromeClient() {} |
467 | 514 |
468 void setToolTip(LocalFrame&, const String& str, TextDirection) override { | 515 void setToolTip(LocalFrame&, const String& str, TextDirection) override { |
469 m_lastToolTip = str; | 516 m_lastToolTip = str; |
470 } | 517 } |
471 | 518 |
472 String& lastToolTip() { return m_lastToolTip; } | 519 String& lastToolTip() { return m_lastToolTip; } |
473 | 520 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
514 WebInputEvent::MouseLeave, WebFloatPoint(0, 0), WebFloatPoint(0, 0), | 561 WebInputEvent::MouseLeave, WebFloatPoint(0, 0), WebFloatPoint(0, 0), |
515 WebPointerProperties::Button::NoButton, 0, WebInputEvent::NoModifiers, | 562 WebPointerProperties::Button::NoButton, 0, WebInputEvent::NoModifiers, |
516 TimeTicks::Now().InSeconds()); | 563 TimeTicks::Now().InSeconds()); |
517 mouseLeaveEvent.setFrameScale(1); | 564 mouseLeaveEvent.setFrameScale(1); |
518 document().frame()->eventHandler().handleMouseLeaveEvent(mouseLeaveEvent); | 565 document().frame()->eventHandler().handleMouseLeaveEvent(mouseLeaveEvent); |
519 | 566 |
520 EXPECT_EQ(WTF::String(), lastToolTip()); | 567 EXPECT_EQ(WTF::String(), lastToolTip()); |
521 } | 568 } |
522 | 569 |
523 } // namespace blink | 570 } // namespace blink |
OLD | NEW |