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

Side by Side Diff: content/browser/media/capture/web_contents_video_capture_device_unittest.cc

Issue 2673373003: getUserMeida: report device starting states (Closed)
Patch Set: address comments on PS#8 Created 3 years, 9 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/browser/media/capture/web_contents_video_capture_device.h" 5 #include "content/browser/media/capture/web_contents_video_capture_device.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <utility> 10 #include <utility>
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 MOCK_METHOD7(OnIncomingCapturedData, 236 MOCK_METHOD7(OnIncomingCapturedData,
237 void(const uint8_t* data, 237 void(const uint8_t* data,
238 int length, 238 int length,
239 const media::VideoCaptureFormat& frame_format, 239 const media::VideoCaptureFormat& frame_format,
240 int rotation, 240 int rotation,
241 base::TimeTicks reference_time, 241 base::TimeTicks reference_time,
242 base::TimeDelta timestamp, 242 base::TimeDelta timestamp,
243 int frame_feedback_id)); 243 int frame_feedback_id));
244 244
245 MOCK_METHOD0(DoOnIncomingCapturedBuffer, void(void)); 245 MOCK_METHOD0(DoOnIncomingCapturedBuffer, void(void));
246 MOCK_METHOD0(OnStarted, void(void));
246 247
247 media::VideoCaptureDevice::Client::Buffer ReserveOutputBuffer( 248 media::VideoCaptureDevice::Client::Buffer ReserveOutputBuffer(
248 const gfx::Size& dimensions, 249 const gfx::Size& dimensions,
249 media::VideoPixelFormat format, 250 media::VideoPixelFormat format,
250 media::VideoPixelStorage storage, 251 media::VideoPixelStorage storage,
251 int frame_feedback_id) override { 252 int frame_feedback_id) override {
252 CHECK_EQ(format, media::PIXEL_FORMAT_I420); 253 CHECK_EQ(format, media::PIXEL_FORMAT_I420);
253 int buffer_id_to_drop = 254 int buffer_id_to_drop =
254 media::VideoCaptureBufferPool::kInvalidId; // Ignored. 255 media::VideoCaptureBufferPool::kInvalidId; // Ignored.
255 const int buffer_id = buffer_pool_->ReserveForProducer( 256 const int buffer_id = buffer_pool_->ReserveForProducer(
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
338 wait_color_yuv_(kWaitColorNotSet), 339 wait_color_yuv_(kWaitColorNotSet),
339 expecting_frames_(true) { 340 expecting_frames_(true) {
340 client_.reset(new StubClient( 341 client_.reset(new StubClient(
341 base::Bind(&StubClientObserver::DidDeliverFrame, 342 base::Bind(&StubClientObserver::DidDeliverFrame,
342 base::Unretained(this)), 343 base::Unretained(this)),
343 base::Bind(&StubClientObserver::OnError, base::Unretained(this)))); 344 base::Bind(&StubClientObserver::OnError, base::Unretained(this))));
344 } 345 }
345 346
346 virtual ~StubClientObserver() {} 347 virtual ~StubClientObserver() {}
347 348
348 std::unique_ptr<media::VideoCaptureDevice::Client> PassClient() { 349 std::unique_ptr<StubClient> PassClient() { return std::move(client_); }
349 return std::move(client_);
350 }
351 350
352 void SetIsExpectingFrames(bool expecting_frames) { 351 void SetIsExpectingFrames(bool expecting_frames) {
353 expecting_frames_ = expecting_frames; 352 expecting_frames_ = expecting_frames;
354 } 353 }
355 354
356 void QuitIfConditionsMet(SkColor color, const gfx::Size& size) { 355 void QuitIfConditionsMet(SkColor color, const gfx::Size& size) {
357 EXPECT_TRUE(expecting_frames_); 356 EXPECT_TRUE(expecting_frames_);
358 if (error_encountered_ || wait_color_yuv_ == kNotInterested || 357 if (error_encountered_ || wait_color_yuv_ == kNotInterested ||
359 wait_color_yuv_ == color) { 358 wait_color_yuv_ == color) {
360 last_frame_color_yuv_ = color; 359 last_frame_color_yuv_ = color;
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
628 std::unique_ptr<media::VideoCaptureDevice> device_; 627 std::unique_ptr<media::VideoCaptureDevice> device_;
629 }; 628 };
630 629
631 // In real-world use cases, there can exist a race condition between starting 630 // In real-world use cases, there can exist a race condition between starting
632 // capture on a WebContents and having the WebContents be destroyed in the 631 // capture on a WebContents and having the WebContents be destroyed in the
633 // meantime. This tests that WebContentsVideoCaptureDevice errors-out 632 // meantime. This tests that WebContentsVideoCaptureDevice errors-out
634 // gracefully. 633 // gracefully.
635 TEST_F(WebContentsVideoCaptureDeviceTest, 634 TEST_F(WebContentsVideoCaptureDeviceTest,
636 SafelyStartsUpAfterWebContentsHasGone) { 635 SafelyStartsUpAfterWebContentsHasGone) {
637 ResetWebContents(); 636 ResetWebContents();
638 device()->AllocateAndStart(DefaultCaptureParams(), 637 auto client = client_observer()->PassClient();
639 client_observer()->PassClient()); 638 EXPECT_CALL(*client, OnStarted());
639 device()->AllocateAndStart(DefaultCaptureParams(), std::move(client));
640 ASSERT_NO_FATAL_FAILURE(client_observer()->WaitForError()); 640 ASSERT_NO_FATAL_FAILURE(client_observer()->WaitForError());
641 device()->StopAndDeAllocate(); 641 device()->StopAndDeAllocate();
642 } 642 }
643 643
644 // Tests that WebContentsVideoCaptureDevice starts, captures a frame, and then 644 // Tests that WebContentsVideoCaptureDevice starts, captures a frame, and then
645 // gracefully errors-out if the WebContents is destroyed before the device is 645 // gracefully errors-out if the WebContents is destroyed before the device is
646 // stopped. 646 // stopped.
647 TEST_F(WebContentsVideoCaptureDeviceTest, 647 TEST_F(WebContentsVideoCaptureDeviceTest,
648 RunsThenErrorsOutWhenWebContentsIsDestroyed) { 648 RunsThenErrorsOutWhenWebContentsIsDestroyed) {
649 // We'll simulate the tab being closed after the capture pipeline is up and 649 // We'll simulate the tab being closed after the capture pipeline is up and
650 // running. 650 // running.
651 device()->AllocateAndStart(DefaultCaptureParams(), 651 auto client = client_observer()->PassClient();
652 client_observer()->PassClient()); 652 EXPECT_CALL(*client, OnStarted());
653 device()->AllocateAndStart(DefaultCaptureParams(), std::move(client));
653 654
654 // Do one capture to prove the tab is initially open and being captured 655 // Do one capture to prove the tab is initially open and being captured
655 // normally. 656 // normally.
656 test_view()->SetSolidColor(SK_ColorRED); 657 test_view()->SetSolidColor(SK_ColorRED);
657 SimulateDrawEvent(); 658 SimulateDrawEvent();
658 ASSERT_NO_FATAL_FAILURE(client_observer()->WaitForNextColor(SK_ColorRED)); 659 ASSERT_NO_FATAL_FAILURE(client_observer()->WaitForNextColor(SK_ColorRED));
659 660
660 base::RunLoop().RunUntilIdle(); 661 base::RunLoop().RunUntilIdle();
661 662
662 // Post a task to close the tab. We should see an error reported to the 663 // Post a task to close the tab. We should see an error reported to the
(...skipping 23 matching lines...) Expand all
686 // wind up in the idle state. 687 // wind up in the idle state.
687 base::RunLoop().RunUntilIdle(); 688 base::RunLoop().RunUntilIdle();
688 } 689 }
689 690
690 // Tests that frames are delivered to different clients across restarts of the 691 // Tests that frames are delivered to different clients across restarts of the
691 // same instance. 692 // same instance.
692 TEST_F(WebContentsVideoCaptureDeviceTest, 693 TEST_F(WebContentsVideoCaptureDeviceTest,
693 DeliversToCorrectClientAcrossRestarts) { 694 DeliversToCorrectClientAcrossRestarts) {
694 // While the device is up-and-running, expect frame captures. 695 // While the device is up-and-running, expect frame captures.
695 client_observer()->SetIsExpectingFrames(true); 696 client_observer()->SetIsExpectingFrames(true);
696 device()->AllocateAndStart(DefaultCaptureParams(), 697 auto client = client_observer()->PassClient();
697 client_observer()->PassClient()); 698 EXPECT_CALL(*client, OnStarted());
699 device()->AllocateAndStart(DefaultCaptureParams(), std::move(client));
698 base::RunLoop().RunUntilIdle(); 700 base::RunLoop().RunUntilIdle();
699 test_view()->SetSolidColor(SK_ColorRED); 701 test_view()->SetSolidColor(SK_ColorRED);
700 SimulateDrawEvent(); 702 SimulateDrawEvent();
701 ASSERT_NO_FATAL_FAILURE(client_observer()->WaitForNextColor(SK_ColorRED)); 703 ASSERT_NO_FATAL_FAILURE(client_observer()->WaitForNextColor(SK_ColorRED));
702 SimulateDrawEvent(); 704 SimulateDrawEvent();
703 test_view()->SetSolidColor(SK_ColorGREEN); 705 test_view()->SetSolidColor(SK_ColorGREEN);
704 SimulateDrawEvent(); 706 SimulateDrawEvent();
705 ASSERT_NO_FATAL_FAILURE(client_observer()->WaitForNextColor(SK_ColorGREEN)); 707 ASSERT_NO_FATAL_FAILURE(client_observer()->WaitForNextColor(SK_ColorGREEN));
706 SimulateDrawEvent(); 708 SimulateDrawEvent();
707 device()->StopAndDeAllocate(); 709 device()->StopAndDeAllocate();
708 710
709 base::RunLoop().RunUntilIdle(); 711 base::RunLoop().RunUntilIdle();
710 712
711 // Now that the device is stopped, expect frames are no longer captured. 713 // Now that the device is stopped, expect frames are no longer captured.
712 client_observer()->SetIsExpectingFrames(false); 714 client_observer()->SetIsExpectingFrames(false);
713 SimulateDrawEvent(); 715 SimulateDrawEvent();
714 SimulateDrawEvent(); 716 SimulateDrawEvent();
715 base::RunLoop().RunUntilIdle(); 717 base::RunLoop().RunUntilIdle();
716 718
717 // Re-start the device with a different client. Only the second client should 719 // Re-start the device with a different client. Only the second client should
718 // expect to see any frame captures. 720 // expect to see any frame captures.
719 StubClientObserver observer2; 721 StubClientObserver observer2;
720 observer2.SetIsExpectingFrames(true); 722 observer2.SetIsExpectingFrames(true);
721 device()->AllocateAndStart(DefaultCaptureParams(), observer2.PassClient()); 723 auto client2 = observer2.PassClient();
724 EXPECT_CALL(*client2, OnStarted());
725 device()->AllocateAndStart(DefaultCaptureParams(), std::move(client2));
722 test_view()->SetSolidColor(SK_ColorBLUE); 726 test_view()->SetSolidColor(SK_ColorBLUE);
723 SimulateDrawEvent(); 727 SimulateDrawEvent();
724 ASSERT_NO_FATAL_FAILURE(observer2.WaitForNextColor(SK_ColorBLUE)); 728 ASSERT_NO_FATAL_FAILURE(observer2.WaitForNextColor(SK_ColorBLUE));
725 test_view()->SetSolidColor(SK_ColorYELLOW); 729 test_view()->SetSolidColor(SK_ColorYELLOW);
726 SimulateDrawEvent(); 730 SimulateDrawEvent();
727 ASSERT_NO_FATAL_FAILURE(observer2.WaitForNextColor(SK_ColorYELLOW)); 731 ASSERT_NO_FATAL_FAILURE(observer2.WaitForNextColor(SK_ColorYELLOW));
728 device()->StopAndDeAllocate(); 732 device()->StopAndDeAllocate();
729 } 733 }
730 734
731 // The "happy case" test. No scaling is needed, so we should be able to change 735 // The "happy case" test. No scaling is needed, so we should be able to change
732 // the picture emitted from the source and expect to see each delivered to the 736 // the picture emitted from the source and expect to see each delivered to the
733 // consumer. The test will alternate between the RGB/SkBitmap and YUV/VideoFrame 737 // consumer. The test will alternate between the RGB/SkBitmap and YUV/VideoFrame
734 // capture paths. 738 // capture paths.
735 TEST_F(WebContentsVideoCaptureDeviceTest, GoesThroughAllTheMotions) { 739 TEST_F(WebContentsVideoCaptureDeviceTest, GoesThroughAllTheMotions) {
736 device()->AllocateAndStart(DefaultCaptureParams(), 740 auto client = client_observer()->PassClient();
737 client_observer()->PassClient()); 741 EXPECT_CALL(*client, OnStarted());
742 device()->AllocateAndStart(DefaultCaptureParams(), std::move(client));
738 743
739 for (int i = 0; i < 3; i++) { 744 for (int i = 0; i < 3; i++) {
740 SCOPED_TRACE(base::StringPrintf("Iteration #%d", i)); 745 SCOPED_TRACE(base::StringPrintf("Iteration #%d", i));
741 746
742 test_view()->SetSolidColor(SK_ColorRED); 747 test_view()->SetSolidColor(SK_ColorRED);
743 for (int j = 0; j <= i; j++) 748 for (int j = 0; j <= i; j++)
744 SimulateDrawEvent(); 749 SimulateDrawEvent();
745 ASSERT_NO_FATAL_FAILURE(client_observer()->WaitForNextColor(SK_ColorRED)); 750 ASSERT_NO_FATAL_FAILURE(client_observer()->WaitForNextColor(SK_ColorRED));
746 751
747 test_view()->SetSolidColor(SK_ColorGREEN); 752 test_view()->SetSolidColor(SK_ColorGREEN);
(...skipping 15 matching lines...) Expand all
763 device()->StopAndDeAllocate(); 768 device()->StopAndDeAllocate();
764 } 769 }
765 770
766 // Tests that, when configured with the FIXED_ASPECT_RATIO resolution change 771 // Tests that, when configured with the FIXED_ASPECT_RATIO resolution change
767 // policy, the source size changes result in video frames of possibly varying 772 // policy, the source size changes result in video frames of possibly varying
768 // resolutions, but all with the same aspect ratio. 773 // resolutions, but all with the same aspect ratio.
769 TEST_F(WebContentsVideoCaptureDeviceTest, VariableResolution_FixedAspectRatio) { 774 TEST_F(WebContentsVideoCaptureDeviceTest, VariableResolution_FixedAspectRatio) {
770 auto capture_params = DefaultCaptureParams(); 775 auto capture_params = DefaultCaptureParams();
771 capture_params.resolution_change_policy = 776 capture_params.resolution_change_policy =
772 media::RESOLUTION_POLICY_FIXED_ASPECT_RATIO; 777 media::RESOLUTION_POLICY_FIXED_ASPECT_RATIO;
773 device()->AllocateAndStart(capture_params, client_observer()->PassClient()); 778 auto client = client_observer()->PassClient();
779 EXPECT_CALL(*client, OnStarted());
780 device()->AllocateAndStart(capture_params, std::move(client));
774 781
775 // Source size equals maximum size. Expect delivered frames to be 782 // Source size equals maximum size. Expect delivered frames to be
776 // kTestWidth by kTestHeight. 783 // kTestWidth by kTestHeight.
777 test_view()->SetSolidColor(SK_ColorRED); 784 test_view()->SetSolidColor(SK_ColorRED);
778 const float device_scale_factor = GetDeviceScaleFactor(); 785 const float device_scale_factor = GetDeviceScaleFactor();
779 SimulateSourceSizeChange(gfx::ConvertSizeToDIP( 786 SimulateSourceSizeChange(gfx::ConvertSizeToDIP(
780 device_scale_factor, gfx::Size(kTestWidth, kTestHeight))); 787 device_scale_factor, gfx::Size(kTestWidth, kTestHeight)));
781 SimulateDrawsUntilNewFrameSizeArrives( 788 SimulateDrawsUntilNewFrameSizeArrives(
782 SK_ColorRED, gfx::Size(kTestWidth, kTestHeight)); 789 SK_ColorRED, gfx::Size(kTestWidth, kTestHeight));
783 790
(...skipping 25 matching lines...) Expand all
809 device()->StopAndDeAllocate(); 816 device()->StopAndDeAllocate();
810 } 817 }
811 818
812 // Tests that, when configured with the ANY_WITHIN_LIMIT resolution change 819 // Tests that, when configured with the ANY_WITHIN_LIMIT resolution change
813 // policy, the source size changes result in video frames of possibly varying 820 // policy, the source size changes result in video frames of possibly varying
814 // resolutions. 821 // resolutions.
815 TEST_F(WebContentsVideoCaptureDeviceTest, VariableResolution_AnyWithinLimits) { 822 TEST_F(WebContentsVideoCaptureDeviceTest, VariableResolution_AnyWithinLimits) {
816 auto capture_params = DefaultCaptureParams(); 823 auto capture_params = DefaultCaptureParams();
817 capture_params.resolution_change_policy = 824 capture_params.resolution_change_policy =
818 media::RESOLUTION_POLICY_ANY_WITHIN_LIMIT; 825 media::RESOLUTION_POLICY_ANY_WITHIN_LIMIT;
819 device()->AllocateAndStart(capture_params, client_observer()->PassClient()); 826 auto client = client_observer()->PassClient();
827 EXPECT_CALL(*client, OnStarted());
828 device()->AllocateAndStart(capture_params, std::move(client));
820 829
821 // Source size equals maximum size. Expect delivered frames to be 830 // Source size equals maximum size. Expect delivered frames to be
822 // kTestWidth by kTestHeight. 831 // kTestWidth by kTestHeight.
823 test_view()->SetSolidColor(SK_ColorRED); 832 test_view()->SetSolidColor(SK_ColorRED);
824 const float device_scale_factor = GetDeviceScaleFactor(); 833 const float device_scale_factor = GetDeviceScaleFactor();
825 SimulateSourceSizeChange(gfx::ConvertSizeToDIP( 834 SimulateSourceSizeChange(gfx::ConvertSizeToDIP(
826 device_scale_factor, gfx::Size(kTestWidth, kTestHeight))); 835 device_scale_factor, gfx::Size(kTestWidth, kTestHeight)));
827 SimulateDrawsUntilNewFrameSizeArrives( 836 SimulateDrawsUntilNewFrameSizeArrives(
828 SK_ColorRED, gfx::Size(kTestWidth, kTestHeight)); 837 SK_ColorRED, gfx::Size(kTestWidth, kTestHeight));
829 838
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
880 policy == media::RESOLUTION_POLICY_FIXED_RESOLUTION ? oddball_size 889 policy == media::RESOLUTION_POLICY_FIXED_RESOLUTION ? oddball_size
881 : standard_size, 890 : standard_size,
882 1.0f / GetDeviceScaleFactor()); 891 1.0f / GetDeviceScaleFactor());
883 ASSERT_NE(capture_preferred_size, web_contents()->GetPreferredSize()); 892 ASSERT_NE(capture_preferred_size, web_contents()->GetPreferredSize());
884 893
885 // Start the WebContentsVideoCaptureDevice. 894 // Start the WebContentsVideoCaptureDevice.
886 auto capture_params = DefaultCaptureParams(); 895 auto capture_params = DefaultCaptureParams();
887 capture_params.requested_format.frame_size = oddball_size; 896 capture_params.requested_format.frame_size = oddball_size;
888 capture_params.resolution_change_policy = policy; 897 capture_params.resolution_change_policy = policy;
889 StubClientObserver unused_observer; 898 StubClientObserver unused_observer;
890 device()->AllocateAndStart(capture_params, unused_observer.PassClient()); 899 auto client = unused_observer.PassClient();
900 EXPECT_CALL(*client, OnStarted());
901 device()->AllocateAndStart(capture_params, std::move(client));
891 base::RunLoop().RunUntilIdle(); 902 base::RunLoop().RunUntilIdle();
892 903
893 // Check that the preferred size of the WebContents matches the one provided 904 // Check that the preferred size of the WebContents matches the one provided
894 // by WebContentsVideoCaptureDevice. 905 // by WebContentsVideoCaptureDevice.
895 EXPECT_EQ(capture_preferred_size, web_contents()->GetPreferredSize()); 906 EXPECT_EQ(capture_preferred_size, web_contents()->GetPreferredSize());
896 907
897 // Stop the WebContentsVideoCaptureDevice. 908 // Stop the WebContentsVideoCaptureDevice.
898 device()->StopAndDeAllocate(); 909 device()->StopAndDeAllocate();
899 base::RunLoop().RunUntilIdle(); 910 base::RunLoop().RunUntilIdle();
900 }; 911 };
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
946 policies[i], gfx::Size(1000, 1000), gfx::Size(1000, 1000)); 957 policies[i], gfx::Size(1000, 1000), gfx::Size(1000, 1000));
947 RunTestForPreferredSize( 958 RunTestForPreferredSize(
948 policies[i], gfx::Size(1600, 1000), gfx::Size(1600, 1000)); 959 policies[i], gfx::Size(1600, 1000), gfx::Size(1600, 1000));
949 RunTestForPreferredSize( 960 RunTestForPreferredSize(
950 policies[i], gfx::Size(837, 999), gfx::Size(837, 999)); 961 policies[i], gfx::Size(837, 999), gfx::Size(837, 999));
951 } 962 }
952 } 963 }
953 964
954 // Tests the Suspend/Resume() functionality. 965 // Tests the Suspend/Resume() functionality.
955 TEST_F(WebContentsVideoCaptureDeviceTest, SuspendsAndResumes) { 966 TEST_F(WebContentsVideoCaptureDeviceTest, SuspendsAndResumes) {
956 device()->AllocateAndStart(DefaultCaptureParams(), 967 auto client = client_observer()->PassClient();
957 client_observer()->PassClient()); 968 EXPECT_CALL(*client, OnStarted());
969 device()->AllocateAndStart(DefaultCaptureParams(), std::move(client));
958 970
959 for (int i = 0; i < 3; ++i) { 971 for (int i = 0; i < 3; ++i) {
960 // Draw a RED frame and wait for a normal frame capture to occur. 972 // Draw a RED frame and wait for a normal frame capture to occur.
961 test_view()->SetSolidColor(SK_ColorRED); 973 test_view()->SetSolidColor(SK_ColorRED);
962 SimulateDrawEvent(); 974 SimulateDrawEvent();
963 ASSERT_NO_FATAL_FAILURE(client_observer()->WaitForNextColor(SK_ColorRED)); 975 ASSERT_NO_FATAL_FAILURE(client_observer()->WaitForNextColor(SK_ColorRED));
964 976
965 // Suspend capture and then draw a GREEN frame. No frame capture should 977 // Suspend capture and then draw a GREEN frame. No frame capture should
966 // occur. 978 // occur.
967 device()->MaybeSuspend(); 979 device()->MaybeSuspend();
(...skipping 12 matching lines...) Expand all
980 test_view()->SetSolidColor(SK_ColorBLUE); 992 test_view()->SetSolidColor(SK_ColorBLUE);
981 SimulateDrawEvent(); 993 SimulateDrawEvent();
982 ASSERT_NO_FATAL_FAILURE(client_observer()->WaitForNextColor(SK_ColorBLUE)); 994 ASSERT_NO_FATAL_FAILURE(client_observer()->WaitForNextColor(SK_ColorBLUE));
983 } 995 }
984 996
985 device()->StopAndDeAllocate(); 997 device()->StopAndDeAllocate();
986 } 998 }
987 999
988 // Tests the RequestRefreshFrame() functionality. 1000 // Tests the RequestRefreshFrame() functionality.
989 TEST_F(WebContentsVideoCaptureDeviceTest, ProvidesRefreshFrames) { 1001 TEST_F(WebContentsVideoCaptureDeviceTest, ProvidesRefreshFrames) {
990 device()->AllocateAndStart(DefaultCaptureParams(), 1002 auto client = client_observer()->PassClient();
991 client_observer()->PassClient()); 1003 EXPECT_CALL(*client, OnStarted());
1004 device()->AllocateAndStart(DefaultCaptureParams(), std::move(client));
992 1005
993 // Request a refresh frame before the first frame has been drawn. This forces 1006 // Request a refresh frame before the first frame has been drawn. This forces
994 // a capture. 1007 // a capture.
995 test_view()->SetSolidColor(SK_ColorRED); 1008 test_view()->SetSolidColor(SK_ColorRED);
996 SimulateRefreshFrameRequest(); 1009 SimulateRefreshFrameRequest();
997 ASSERT_NO_FATAL_FAILURE(client_observer()->WaitForNextColor(SK_ColorRED)); 1010 ASSERT_NO_FATAL_FAILURE(client_observer()->WaitForNextColor(SK_ColorRED));
998 1011
999 // Now, draw a frame and wait for a normal frame capture to occur. 1012 // Now, draw a frame and wait for a normal frame capture to occur.
1000 test_view()->SetSolidColor(SK_ColorGREEN); 1013 test_view()->SetSolidColor(SK_ColorGREEN);
1001 SimulateDrawEvent(); 1014 SimulateDrawEvent();
1002 ASSERT_NO_FATAL_FAILURE(client_observer()->WaitForNextColor(SK_ColorGREEN)); 1015 ASSERT_NO_FATAL_FAILURE(client_observer()->WaitForNextColor(SK_ColorGREEN));
1003 1016
1004 // Now, make three more refresh frame requests. Although the source has 1017 // Now, make three more refresh frame requests. Although the source has
1005 // changed to BLUE, no draw event has occurred. Therefore, expect the refresh 1018 // changed to BLUE, no draw event has occurred. Therefore, expect the refresh
1006 // frames to contain the content from the last drawn frame, which is GREEN. 1019 // frames to contain the content from the last drawn frame, which is GREEN.
1007 test_view()->SetSolidColor(SK_ColorBLUE); 1020 test_view()->SetSolidColor(SK_ColorBLUE);
1008 for (int i = 0; i < 3; ++i) { 1021 for (int i = 0; i < 3; ++i) {
1009 SimulateRefreshFrameRequest(); 1022 SimulateRefreshFrameRequest();
1010 ASSERT_NO_FATAL_FAILURE(client_observer()->WaitForNextColor(SK_ColorGREEN)); 1023 ASSERT_NO_FATAL_FAILURE(client_observer()->WaitForNextColor(SK_ColorGREEN));
1011 } 1024 }
1012 1025
1013 device()->StopAndDeAllocate(); 1026 device()->StopAndDeAllocate();
1014 } 1027 }
1015 1028
1016 } // namespace 1029 } // namespace
1017 } // namespace content 1030 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698