| 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 "modules/media_controls/MediaControlsImpl.h" | 5 #include "modules/media_controls/MediaControlsImpl.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include "core/HTMLNames.h" | 9 #include "core/HTMLNames.h" |
| 10 #include "core/css/StylePropertySet.h" | 10 #include "core/css/StylePropertySet.h" |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 192 media_controls_->MediaElement().getBoundingClientRect()); | 192 media_controls_->MediaElement().getBoundingClientRect()); |
| 193 } | 193 } |
| 194 | 194 |
| 195 void SimulateHideMediaControlsTimerFired() { | 195 void SimulateHideMediaControlsTimerFired() { |
| 196 media_controls_->HideMediaControlsTimerFired(nullptr); | 196 media_controls_->HideMediaControlsTimerFired(nullptr); |
| 197 } | 197 } |
| 198 | 198 |
| 199 void SimulateLoadedMetadata() { media_controls_->OnLoadedMetadata(); } | 199 void SimulateLoadedMetadata() { media_controls_->OnLoadedMetadata(); } |
| 200 | 200 |
| 201 MediaControlsImpl& MediaControls() { return *media_controls_; } | 201 MediaControlsImpl& MediaControls() { return *media_controls_; } |
| 202 MediaControlVolumeSliderElement* VolumeSliderElement() const { |
| 203 return media_controls_->volume_slider_; |
| 204 } |
| 205 MediaControlTimelineElement* TimelineElement() const { |
| 206 return media_controls_->timeline_; |
| 207 } |
| 202 MockVideoWebMediaPlayer* WebMediaPlayer() { | 208 MockVideoWebMediaPlayer* WebMediaPlayer() { |
| 203 return static_cast<MockVideoWebMediaPlayer*>( | 209 return static_cast<MockVideoWebMediaPlayer*>( |
| 204 MediaControls().MediaElement().GetWebMediaPlayer()); | 210 MediaControls().MediaElement().GetWebMediaPlayer()); |
| 205 } | 211 } |
| 206 Document& GetDocument() { return page_holder_->GetDocument(); } | 212 Document& GetDocument() { return page_holder_->GetDocument(); } |
| 207 | 213 |
| 208 HistogramTester& GetHistogramTester() { return histogram_tester_; } | 214 HistogramTester& GetHistogramTester() { return histogram_tester_; } |
| 209 | 215 |
| 210 void LoadMediaWithDuration(double duration) { | 216 void LoadMediaWithDuration(double duration) { |
| 211 MediaControls().MediaElement().SetSrc("https://example.com/foo.mp4"); | 217 MediaControls().MediaElement().SetSrc("https://example.com/foo.mp4"); |
| (...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 535 // Download button should not be displayed for HLS streams. | 541 // Download button should not be displayed for HLS streams. |
| 536 MediaControls().MediaElement().SetSrc("https://example.com/foo.m3u8"); | 542 MediaControls().MediaElement().SetSrc("https://example.com/foo.m3u8"); |
| 537 testing::RunPendingTasks(); | 543 testing::RunPendingTasks(); |
| 538 SimulateLoadedMetadata(); | 544 SimulateLoadedMetadata(); |
| 539 EXPECT_FALSE(IsElementVisible(*download_button)); | 545 EXPECT_FALSE(IsElementVisible(*download_button)); |
| 540 } | 546 } |
| 541 | 547 |
| 542 TEST_F(MediaControlsImplTest, TimelineSeekToRoundedEnd) { | 548 TEST_F(MediaControlsImplTest, TimelineSeekToRoundedEnd) { |
| 543 EnsureSizing(); | 549 EnsureSizing(); |
| 544 | 550 |
| 545 // Tests the case where the real length of the video, |exactDuration|, gets | 551 // Tests the case where the real length of the video, |exact_duration|, gets |
| 546 // rounded up slightly to |roundedUpDuration| when setting the timeline's | 552 // rounded up slightly to |rounded_up_duration| when setting the timeline's |
| 547 // |max| attribute (crbug.com/695065). | 553 // |max| attribute (crbug.com/695065). |
| 548 double exact_duration = 596.586667; | 554 double exact_duration = 596.586667; |
| 549 double rounded_up_duration = 596.587; | 555 double rounded_up_duration = 596.587; |
| 550 LoadMediaWithDuration(exact_duration); | 556 LoadMediaWithDuration(exact_duration); |
| 551 | 557 |
| 552 // Simulate a click slightly past the end of the track of the timeline's | 558 // Simulate a click slightly past the end of the track of the timeline's |
| 553 // underlying <input type="range">. This would set the |value| to the |max| | 559 // underlying <input type="range">. This would set the |value| to the |max| |
| 554 // attribute, which can be slightly rounded relative to the duration. | 560 // attribute, which can be slightly rounded relative to the duration. |
| 555 MediaControlTimelineElement* timeline = MediaControls().TimelineElement(); | 561 MediaControlTimelineElement* timeline = TimelineElement(); |
| 556 timeline->setValueAsNumber(rounded_up_duration, ASSERT_NO_EXCEPTION); | 562 timeline->setValueAsNumber(rounded_up_duration, ASSERT_NO_EXCEPTION); |
| 557 ASSERT_EQ(rounded_up_duration, timeline->valueAsNumber()); | 563 ASSERT_EQ(rounded_up_duration, timeline->valueAsNumber()); |
| 558 EXPECT_EQ(0.0, MediaControls().MediaElement().currentTime()); | 564 EXPECT_EQ(0.0, MediaControls().MediaElement().currentTime()); |
| 559 timeline->DispatchInputEvent(); | 565 timeline->DispatchInputEvent(); |
| 560 EXPECT_EQ(exact_duration, MediaControls().MediaElement().currentTime()); | 566 EXPECT_EQ(exact_duration, MediaControls().MediaElement().currentTime()); |
| 561 } | 567 } |
| 562 | 568 |
| 563 TEST_F(MediaControlsImplTest, TimelineImmediatelyUpdatesCurrentTime) { | 569 TEST_F(MediaControlsImplTest, TimelineImmediatelyUpdatesCurrentTime) { |
| 564 EnsureSizing(); | 570 EnsureSizing(); |
| 565 | 571 |
| 566 MediaControlCurrentTimeDisplayElement* current_time_display = | 572 MediaControlCurrentTimeDisplayElement* current_time_display = |
| 567 static_cast<MediaControlCurrentTimeDisplayElement*>( | 573 static_cast<MediaControlCurrentTimeDisplayElement*>( |
| 568 GetElementByShadowPseudoId( | 574 GetElementByShadowPseudoId( |
| 569 MediaControls(), "-webkit-media-controls-current-time-display")); | 575 MediaControls(), "-webkit-media-controls-current-time-display")); |
| 570 | 576 |
| 571 double duration = 600; | 577 double duration = 600; |
| 572 LoadMediaWithDuration(duration); | 578 LoadMediaWithDuration(duration); |
| 573 | 579 |
| 574 // Simulate seeking the underlying range to 50%. Current time display should | 580 // Simulate seeking the underlying range to 50%. Current time display should |
| 575 // update synchronously (rather than waiting for media to finish seeking). | 581 // update synchronously (rather than waiting for media to finish seeking). |
| 576 MediaControls().TimelineElement()->setValueAsNumber(duration / 2, | 582 TimelineElement()->setValueAsNumber(duration / 2, ASSERT_NO_EXCEPTION); |
| 577 ASSERT_NO_EXCEPTION); | 583 TimelineElement()->DispatchInputEvent(); |
| 578 MediaControls().TimelineElement()->DispatchInputEvent(); | |
| 579 EXPECT_EQ(duration / 2, current_time_display->CurrentValue()); | 584 EXPECT_EQ(duration / 2, current_time_display->CurrentValue()); |
| 580 } | 585 } |
| 581 | 586 |
| 582 TEST_F(MediaControlsImplTest, VolumeSliderPaintInvalidationOnInput) { | 587 TEST_F(MediaControlsImplTest, VolumeSliderPaintInvalidationOnInput) { |
| 583 EnsureSizing(); | 588 EnsureSizing(); |
| 584 | 589 |
| 585 Element* volume_slider = MediaControls().VolumeSliderElement(); | 590 Element* volume_slider = VolumeSliderElement(); |
| 586 | 591 |
| 587 MockLayoutObject layout_object; | 592 MockLayoutObject layout_object; |
| 588 LayoutObject* prev_layout_object = volume_slider->GetLayoutObject(); | 593 LayoutObject* prev_layout_object = volume_slider->GetLayoutObject(); |
| 589 volume_slider->SetLayoutObject(&layout_object); | 594 volume_slider->SetLayoutObject(&layout_object); |
| 590 | 595 |
| 591 Event* event = Event::Create(EventTypeNames::input); | 596 Event* event = Event::Create(EventTypeNames::input); |
| 592 volume_slider->DefaultEventHandler(event); | 597 volume_slider->DefaultEventHandler(event); |
| 593 EXPECT_EQ(1, layout_object.FullPaintInvalidationCallCount()); | 598 EXPECT_EQ(1, layout_object.FullPaintInvalidationCallCount()); |
| 594 | 599 |
| 595 event = Event::Create(EventTypeNames::input); | 600 event = Event::Create(EventTypeNames::input); |
| 596 volume_slider->DefaultEventHandler(event); | 601 volume_slider->DefaultEventHandler(event); |
| 597 EXPECT_EQ(2, layout_object.FullPaintInvalidationCallCount()); | 602 EXPECT_EQ(2, layout_object.FullPaintInvalidationCallCount()); |
| 598 | 603 |
| 599 event = Event::Create(EventTypeNames::input); | 604 event = Event::Create(EventTypeNames::input); |
| 600 volume_slider->DefaultEventHandler(event); | 605 volume_slider->DefaultEventHandler(event); |
| 601 EXPECT_EQ(3, layout_object.FullPaintInvalidationCallCount()); | 606 EXPECT_EQ(3, layout_object.FullPaintInvalidationCallCount()); |
| 602 | 607 |
| 603 volume_slider->SetLayoutObject(prev_layout_object); | 608 volume_slider->SetLayoutObject(prev_layout_object); |
| 604 } | 609 } |
| 605 | 610 |
| 606 TEST_F(MediaControlsImplTest, TimelineMetricsWidth) { | 611 TEST_F(MediaControlsImplTest, TimelineMetricsWidth) { |
| 607 MediaControls().MediaElement().SetSrc("https://example.com/foo.mp4"); | 612 MediaControls().MediaElement().SetSrc("https://example.com/foo.mp4"); |
| 608 testing::RunPendingTasks(); | 613 testing::RunPendingTasks(); |
| 609 SetReady(); | 614 SetReady(); |
| 610 EnsureSizing(); | 615 EnsureSizing(); |
| 611 testing::RunPendingTasks(); | 616 testing::RunPendingTasks(); |
| 612 | 617 |
| 613 MediaControlTimelineElement* timeline = MediaControls().TimelineElement(); | 618 MediaControlTimelineElement* timeline = TimelineElement(); |
| 614 ASSERT_TRUE(IsElementVisible(*timeline)); | 619 ASSERT_TRUE(IsElementVisible(*timeline)); |
| 615 ASSERT_LT(0, timeline->getBoundingClientRect()->width()); | 620 ASSERT_LT(0, timeline->getBoundingClientRect()->width()); |
| 616 | 621 |
| 617 MediaControls().MediaElement().Play(); | 622 MediaControls().MediaElement().Play(); |
| 618 testing::RunPendingTasks(); | 623 testing::RunPendingTasks(); |
| 619 | 624 |
| 620 GetHistogramTester().ExpectUniqueSample( | 625 GetHistogramTester().ExpectUniqueSample( |
| 621 "Media.Timeline.Width.InlineLandscape", | 626 "Media.Timeline.Width.InlineLandscape", |
| 622 timeline->getBoundingClientRect()->width(), 1); | 627 timeline->getBoundingClientRect()->width(), 1); |
| 623 GetHistogramTester().ExpectTotalCount("Media.Timeline.Width.InlinePortrait", | 628 GetHistogramTester().ExpectTotalCount("Media.Timeline.Width.InlinePortrait", |
| 624 0); | 629 0); |
| 625 GetHistogramTester().ExpectTotalCount( | 630 GetHistogramTester().ExpectTotalCount( |
| 626 "Media.Timeline.Width.FullscreenLandscape", 0); | 631 "Media.Timeline.Width.FullscreenLandscape", 0); |
| 627 GetHistogramTester().ExpectTotalCount( | 632 GetHistogramTester().ExpectTotalCount( |
| 628 "Media.Timeline.Width.FullscreenPortrait", 0); | 633 "Media.Timeline.Width.FullscreenPortrait", 0); |
| 629 } | 634 } |
| 630 | 635 |
| 631 // TODO(johnme): Fix and re-enable this on Android. | 636 // TODO(johnme): Fix and re-enable this on Android. |
| 632 #if OS(ANDROID) | 637 #if OS(ANDROID) |
| 633 #define MAYBE_TimelineMetricsClick DISABLED_TimelineMetricsClick | 638 #define MAYBE_TimelineMetricsClick DISABLED_TimelineMetricsClick |
| 634 #else | 639 #else |
| 635 #define MAYBE_TimelineMetricsClick TimelineMetricsClick | 640 #define MAYBE_TimelineMetricsClick TimelineMetricsClick |
| 636 #endif | 641 #endif |
| 637 TEST_F(MediaControlsImplTest, MAYBE_TimelineMetricsClick) { | 642 TEST_F(MediaControlsImplTest, MAYBE_TimelineMetricsClick) { |
| 638 double duration = 540; // 9 minutes | 643 double duration = 540; // 9 minutes |
| 639 LoadMediaWithDuration(duration); | 644 LoadMediaWithDuration(duration); |
| 640 EnsureSizing(); | 645 EnsureSizing(); |
| 641 testing::RunPendingTasks(); | 646 testing::RunPendingTasks(); |
| 642 | 647 |
| 643 ASSERT_TRUE(IsElementVisible(*MediaControls().TimelineElement())); | 648 ASSERT_TRUE(IsElementVisible(*TimelineElement())); |
| 644 ClientRect* timeline_rect = | 649 ClientRect* timelineRect = TimelineElement()->getBoundingClientRect(); |
| 645 MediaControls().TimelineElement()->getBoundingClientRect(); | 650 ASSERT_LT(0, timelineRect->width()); |
| 646 ASSERT_LT(0, timeline_rect->width()); | |
| 647 | 651 |
| 648 EXPECT_EQ(0, MediaControls().MediaElement().currentTime()); | 652 EXPECT_EQ(0, MediaControls().MediaElement().currentTime()); |
| 649 | 653 |
| 650 WebFloatPoint track_center( | 654 WebFloatPoint trackCenter(timelineRect->left() + timelineRect->width() / 2, |
| 651 timeline_rect->left() + timeline_rect->width() / 2, | 655 timelineRect->top() + timelineRect->height() / 2); |
| 652 timeline_rect->top() + timeline_rect->height() / 2); | 656 MouseDownAt(trackCenter); |
| 653 MouseDownAt(track_center); | 657 MouseUpAt(trackCenter); |
| 654 MouseUpAt(track_center); | |
| 655 testing::RunPendingTasks(); | 658 testing::RunPendingTasks(); |
| 656 | 659 |
| 657 EXPECT_LE(0.49 * duration, MediaControls().MediaElement().currentTime()); | 660 EXPECT_LE(0.49 * duration, MediaControls().MediaElement().currentTime()); |
| 658 EXPECT_GE(0.51 * duration, MediaControls().MediaElement().currentTime()); | 661 EXPECT_GE(0.51 * duration, MediaControls().MediaElement().currentTime()); |
| 659 | 662 |
| 660 GetHistogramTester().ExpectUniqueSample("Media.Timeline.SeekType.128_255", | 663 GetHistogramTester().ExpectUniqueSample("Media.Timeline.SeekType.128_255", |
| 661 0 /* SeekType::kClick */, 1); | 664 0 /* SeekType::kClick */, 1); |
| 662 GetHistogramTester().ExpectTotalCount( | 665 GetHistogramTester().ExpectTotalCount( |
| 663 "Media.Timeline.DragGestureDuration.128_255", 0); | 666 "Media.Timeline.DragGestureDuration.128_255", 0); |
| 664 GetHistogramTester().ExpectTotalCount("Media.Timeline.DragPercent.128_255", | 667 GetHistogramTester().ExpectTotalCount("Media.Timeline.DragPercent.128_255", |
| (...skipping 11 matching lines...) Expand all Loading... |
| 676 #else | 679 #else |
| 677 #define MAYBE_TimelineMetricsDragFromCurrentPosition \ | 680 #define MAYBE_TimelineMetricsDragFromCurrentPosition \ |
| 678 TimelineMetricsDragFromCurrentPosition | 681 TimelineMetricsDragFromCurrentPosition |
| 679 #endif | 682 #endif |
| 680 TEST_F(MediaControlsImplTest, MAYBE_TimelineMetricsDragFromCurrentPosition) { | 683 TEST_F(MediaControlsImplTest, MAYBE_TimelineMetricsDragFromCurrentPosition) { |
| 681 double duration = 540; // 9 minutes | 684 double duration = 540; // 9 minutes |
| 682 LoadMediaWithDuration(duration); | 685 LoadMediaWithDuration(duration); |
| 683 EnsureSizing(); | 686 EnsureSizing(); |
| 684 testing::RunPendingTasks(); | 687 testing::RunPendingTasks(); |
| 685 | 688 |
| 686 ASSERT_TRUE(IsElementVisible(*MediaControls().TimelineElement())); | 689 ASSERT_TRUE(IsElementVisible(*TimelineElement())); |
| 687 ClientRect* timeline_rect = | 690 ClientRect* timeline_rect = TimelineElement()->getBoundingClientRect(); |
| 688 MediaControls().TimelineElement()->getBoundingClientRect(); | |
| 689 ASSERT_LT(0, timeline_rect->width()); | 691 ASSERT_LT(0, timeline_rect->width()); |
| 690 | 692 |
| 691 EXPECT_EQ(0, MediaControls().MediaElement().currentTime()); | 693 EXPECT_EQ(0, MediaControls().MediaElement().currentTime()); |
| 692 | 694 |
| 693 float y = timeline_rect->top() + timeline_rect->height() / 2; | 695 float y = timeline_rect->top() + timeline_rect->height() / 2; |
| 694 WebFloatPoint thumb(timeline_rect->left(), y); | 696 WebFloatPoint thumb(timeline_rect->left(), y); |
| 695 WebFloatPoint track_two_thirds( | 697 WebFloatPoint track_two_thirds( |
| 696 timeline_rect->left() + timeline_rect->width() * 2 / 3, y); | 698 timeline_rect->left() + timeline_rect->width() * 2 / 3, y); |
| 697 MouseDownAt(thumb); | 699 MouseDownAt(thumb); |
| 698 MouseMoveTo(track_two_thirds); | 700 MouseMoveTo(track_two_thirds); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 720 DISABLED_TimelineMetricsDragFromElsewhere | 722 DISABLED_TimelineMetricsDragFromElsewhere |
| 721 #else | 723 #else |
| 722 #define MAYBE_TimelineMetricsDragFromElsewhere TimelineMetricsDragFromElsewhere | 724 #define MAYBE_TimelineMetricsDragFromElsewhere TimelineMetricsDragFromElsewhere |
| 723 #endif | 725 #endif |
| 724 TEST_F(MediaControlsImplTest, MAYBE_TimelineMetricsDragFromElsewhere) { | 726 TEST_F(MediaControlsImplTest, MAYBE_TimelineMetricsDragFromElsewhere) { |
| 725 double duration = 540; // 9 minutes | 727 double duration = 540; // 9 minutes |
| 726 LoadMediaWithDuration(duration); | 728 LoadMediaWithDuration(duration); |
| 727 EnsureSizing(); | 729 EnsureSizing(); |
| 728 testing::RunPendingTasks(); | 730 testing::RunPendingTasks(); |
| 729 | 731 |
| 730 ASSERT_TRUE(IsElementVisible(*MediaControls().TimelineElement())); | 732 ASSERT_TRUE(IsElementVisible(*TimelineElement())); |
| 731 ClientRect* timeline_rect = | 733 ClientRect* timelineRect = TimelineElement()->getBoundingClientRect(); |
| 732 MediaControls().TimelineElement()->getBoundingClientRect(); | 734 ASSERT_LT(0, timelineRect->width()); |
| 733 ASSERT_LT(0, timeline_rect->width()); | |
| 734 | 735 |
| 735 EXPECT_EQ(0, MediaControls().MediaElement().currentTime()); | 736 EXPECT_EQ(0, MediaControls().MediaElement().currentTime()); |
| 736 | 737 |
| 737 float y = timeline_rect->top() + timeline_rect->height() / 2; | 738 float y = timelineRect->top() + timelineRect->height() / 2; |
| 738 WebFloatPoint track_one_third( | 739 WebFloatPoint trackOneThird( |
| 739 timeline_rect->left() + timeline_rect->width() * 1 / 3, y); | 740 timelineRect->left() + timelineRect->width() * 1 / 3, y); |
| 740 WebFloatPoint track_two_thirds( | 741 WebFloatPoint trackTwoThirds( |
| 741 timeline_rect->left() + timeline_rect->width() * 2 / 3, y); | 742 timelineRect->left() + timelineRect->width() * 2 / 3, y); |
| 742 MouseDownAt(track_one_third); | 743 MouseDownAt(trackOneThird); |
| 743 MouseMoveTo(track_two_thirds); | 744 MouseMoveTo(trackTwoThirds); |
| 744 MouseUpAt(track_two_thirds); | 745 MouseUpAt(trackTwoThirds); |
| 745 | 746 |
| 746 EXPECT_LE(0.66 * duration, MediaControls().MediaElement().currentTime()); | 747 EXPECT_LE(0.66 * duration, MediaControls().MediaElement().currentTime()); |
| 747 EXPECT_GE(0.68 * duration, MediaControls().MediaElement().currentTime()); | 748 EXPECT_GE(0.68 * duration, MediaControls().MediaElement().currentTime()); |
| 748 | 749 |
| 749 GetHistogramTester().ExpectUniqueSample("Media.Timeline.SeekType.128_255", | 750 GetHistogramTester().ExpectUniqueSample("Media.Timeline.SeekType.128_255", |
| 750 2 /* SeekType::kDragFromElsewhere */, | 751 2 /* SeekType::kDragFromElsewhere */, |
| 751 1); | 752 1); |
| 752 GetHistogramTester().ExpectTotalCount( | 753 GetHistogramTester().ExpectTotalCount( |
| 753 "Media.Timeline.DragGestureDuration.128_255", 1); | 754 "Media.Timeline.DragGestureDuration.128_255", 1); |
| 754 GetHistogramTester().ExpectUniqueSample("Media.Timeline.DragPercent.128_255", | 755 GetHistogramTester().ExpectUniqueSample("Media.Timeline.DragPercent.128_255", |
| (...skipping 10 matching lines...) Expand all Loading... |
| 765 DISABLED_TimelineMetricsDragBackAndForth | 766 DISABLED_TimelineMetricsDragBackAndForth |
| 766 #else | 767 #else |
| 767 #define MAYBE_TimelineMetricsDragBackAndForth TimelineMetricsDragBackAndForth | 768 #define MAYBE_TimelineMetricsDragBackAndForth TimelineMetricsDragBackAndForth |
| 768 #endif | 769 #endif |
| 769 TEST_F(MediaControlsImplTest, MAYBE_TimelineMetricsDragBackAndForth) { | 770 TEST_F(MediaControlsImplTest, MAYBE_TimelineMetricsDragBackAndForth) { |
| 770 double duration = 540; // 9 minutes | 771 double duration = 540; // 9 minutes |
| 771 LoadMediaWithDuration(duration); | 772 LoadMediaWithDuration(duration); |
| 772 EnsureSizing(); | 773 EnsureSizing(); |
| 773 testing::RunPendingTasks(); | 774 testing::RunPendingTasks(); |
| 774 | 775 |
| 775 ASSERT_TRUE(IsElementVisible(*MediaControls().TimelineElement())); | 776 ASSERT_TRUE(IsElementVisible(*TimelineElement())); |
| 776 ClientRect* timeline_rect = | 777 ClientRect* timelineRect = TimelineElement()->getBoundingClientRect(); |
| 777 MediaControls().TimelineElement()->getBoundingClientRect(); | 778 ASSERT_LT(0, timelineRect->width()); |
| 778 ASSERT_LT(0, timeline_rect->width()); | |
| 779 | 779 |
| 780 EXPECT_EQ(0, MediaControls().MediaElement().currentTime()); | 780 EXPECT_EQ(0, MediaControls().MediaElement().currentTime()); |
| 781 | 781 |
| 782 float y = timeline_rect->top() + timeline_rect->height() / 2; | 782 float y = timelineRect->top() + timelineRect->height() / 2; |
| 783 WebFloatPoint track_two_thirds( | 783 WebFloatPoint trackTwoThirds( |
| 784 timeline_rect->left() + timeline_rect->width() * 2 / 3, y); | 784 timelineRect->left() + timelineRect->width() * 2 / 3, y); |
| 785 WebFloatPoint track_end(timeline_rect->left() + timeline_rect->width(), y); | 785 WebFloatPoint trackEnd(timelineRect->left() + timelineRect->width(), y); |
| 786 WebFloatPoint track_one_third( | 786 WebFloatPoint trackOneThird( |
| 787 timeline_rect->left() + timeline_rect->width() * 1 / 3, y); | 787 timelineRect->left() + timelineRect->width() * 1 / 3, y); |
| 788 MouseDownAt(track_two_thirds); | 788 MouseDownAt(trackTwoThirds); |
| 789 MouseMoveTo(track_end); | 789 MouseMoveTo(trackEnd); |
| 790 MouseMoveTo(track_one_third); | 790 MouseMoveTo(trackOneThird); |
| 791 MouseUpAt(track_one_third); | 791 MouseUpAt(trackOneThird); |
| 792 | 792 |
| 793 EXPECT_LE(0.32 * duration, MediaControls().MediaElement().currentTime()); | 793 EXPECT_LE(0.32 * duration, MediaControls().MediaElement().currentTime()); |
| 794 EXPECT_GE(0.34 * duration, MediaControls().MediaElement().currentTime()); | 794 EXPECT_GE(0.34 * duration, MediaControls().MediaElement().currentTime()); |
| 795 | 795 |
| 796 GetHistogramTester().ExpectUniqueSample("Media.Timeline.SeekType.128_255", | 796 GetHistogramTester().ExpectUniqueSample("Media.Timeline.SeekType.128_255", |
| 797 2 /* SeekType::kDragFromElsewhere */, | 797 2 /* SeekType::kDragFromElsewhere */, |
| 798 1); | 798 1); |
| 799 GetHistogramTester().ExpectTotalCount( | 799 GetHistogramTester().ExpectTotalCount( |
| 800 "Media.Timeline.DragGestureDuration.128_255", 1); | 800 "Media.Timeline.DragGestureDuration.128_255", 1); |
| 801 GetHistogramTester().ExpectUniqueSample("Media.Timeline.DragPercent.128_255", | 801 GetHistogramTester().ExpectUniqueSample("Media.Timeline.DragPercent.128_255", |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 842 MediaControls().PanelElement()->DispatchEvent(Event::Create("keypress")); | 842 MediaControls().PanelElement()->DispatchEvent(Event::Create("keypress")); |
| 843 platform->RunForPeriodSeconds(2); | 843 platform->RunForPeriodSeconds(2); |
| 844 EXPECT_TRUE(IsElementVisible(*panel)); | 844 EXPECT_TRUE(IsElementVisible(*panel)); |
| 845 | 845 |
| 846 // Once user interaction stops, controls can hide. | 846 // Once user interaction stops, controls can hide. |
| 847 platform->RunForPeriodSeconds(2); | 847 platform->RunForPeriodSeconds(2); |
| 848 EXPECT_FALSE(IsElementVisible(*panel)); | 848 EXPECT_FALSE(IsElementVisible(*panel)); |
| 849 } | 849 } |
| 850 | 850 |
| 851 } // namespace blink | 851 } // namespace blink |
| OLD | NEW |