| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <string> | 5 #include <string> |
| 6 #include <vector> | 6 #include <vector> |
| 7 | 7 |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 closure.Run(); | 29 closure.Run(); |
| 30 } | 30 } |
| 31 | 31 |
| 32 class MediaStreamVideoSourceTest | 32 class MediaStreamVideoSourceTest |
| 33 : public ::testing::Test { | 33 : public ::testing::Test { |
| 34 public: | 34 public: |
| 35 MediaStreamVideoSourceTest() | 35 MediaStreamVideoSourceTest() |
| 36 : child_process_(new ChildProcess()), | 36 : child_process_(new ChildProcess()), |
| 37 number_of_successful_constraints_applied_(0), | 37 number_of_successful_constraints_applied_(0), |
| 38 number_of_failed_constraints_applied_(0), | 38 number_of_failed_constraints_applied_(0), |
| 39 result_(MEDIA_DEVICE_OK), |
| 40 result_name_(""), |
| 39 mock_source_(new MockMediaStreamVideoSource(true)) { | 41 mock_source_(new MockMediaStreamVideoSource(true)) { |
| 40 media::VideoCaptureFormats formats; | 42 media::VideoCaptureFormats formats; |
| 41 formats.push_back(media::VideoCaptureFormat( | 43 formats.push_back(media::VideoCaptureFormat( |
| 42 gfx::Size(1280, 720), 30, media::PIXEL_FORMAT_I420)); | 44 gfx::Size(1280, 720), 30, media::PIXEL_FORMAT_I420)); |
| 43 formats.push_back(media::VideoCaptureFormat( | 45 formats.push_back(media::VideoCaptureFormat( |
| 44 gfx::Size(640, 480), 30, media::PIXEL_FORMAT_I420)); | 46 gfx::Size(640, 480), 30, media::PIXEL_FORMAT_I420)); |
| 45 formats.push_back(media::VideoCaptureFormat( | 47 formats.push_back(media::VideoCaptureFormat( |
| 46 gfx::Size(352, 288), 30, media::PIXEL_FORMAT_I420)); | 48 gfx::Size(352, 288), 30, media::PIXEL_FORMAT_I420)); |
| 47 formats.push_back(media::VideoCaptureFormat( | 49 formats.push_back(media::VideoCaptureFormat( |
| 48 gfx::Size(320, 240), 30, media::PIXEL_FORMAT_I420)); | 50 gfx::Size(320, 240), 30, media::PIXEL_FORMAT_I420)); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 89 } | 91 } |
| 90 | 92 |
| 91 int NumberOfSuccessConstraintsCallbacks() const { | 93 int NumberOfSuccessConstraintsCallbacks() const { |
| 92 return number_of_successful_constraints_applied_; | 94 return number_of_successful_constraints_applied_; |
| 93 } | 95 } |
| 94 | 96 |
| 95 int NumberOfFailedConstraintsCallbacks() const { | 97 int NumberOfFailedConstraintsCallbacks() const { |
| 96 return number_of_failed_constraints_applied_; | 98 return number_of_failed_constraints_applied_; |
| 97 } | 99 } |
| 98 | 100 |
| 101 content::MediaStreamRequestResult error_type() const { return result_; } |
| 102 blink::WebString error_name() const { return result_name_; } |
| 103 |
| 99 MockMediaStreamVideoSource* mock_source() { return mock_source_; } | 104 MockMediaStreamVideoSource* mock_source() { return mock_source_; } |
| 100 | 105 |
| 101 // Test that the source crops/scales to the requested width and | 106 // Test that the source crops/scales to the requested width and |
| 102 // height even though the camera delivers a larger frame. | 107 // height even though the camera delivers a larger frame. |
| 103 void TestSourceCropFrame(int capture_width, | 108 void TestSourceCropFrame(int capture_width, |
| 104 int capture_height, | 109 int capture_height, |
| 105 const blink::WebMediaConstraints& constraints, | 110 const blink::WebMediaConstraints& constraints, |
| 106 int expected_width, | 111 int expected_width, |
| 107 int expected_height) { | 112 int expected_height) { |
| 108 // Expect the source to start capture with the supported resolution. | 113 // Expect the source to start capture with the supported resolution. |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 192 MediaStreamVideoSink::RemoveFromVideoTrack(&sink1, track1); | 197 MediaStreamVideoSink::RemoveFromVideoTrack(&sink1, track1); |
| 193 MediaStreamVideoSink::RemoveFromVideoTrack(&sink2, track2); | 198 MediaStreamVideoSink::RemoveFromVideoTrack(&sink2, track2); |
| 194 } | 199 } |
| 195 | 200 |
| 196 void ReleaseTrackAndSourceOnAddTrackCallback( | 201 void ReleaseTrackAndSourceOnAddTrackCallback( |
| 197 const blink::WebMediaStreamTrack& track_to_release) { | 202 const blink::WebMediaStreamTrack& track_to_release) { |
| 198 track_to_release_ = track_to_release; | 203 track_to_release_ = track_to_release; |
| 199 } | 204 } |
| 200 | 205 |
| 201 private: | 206 private: |
| 202 void OnConstraintsApplied(MediaStreamSource* source, bool success) { | 207 void OnConstraintsApplied(MediaStreamSource* source, |
| 208 MediaStreamRequestResult result, |
| 209 const blink::WebString& result_name) { |
| 203 ASSERT_EQ(source, webkit_source_.extraData()); | 210 ASSERT_EQ(source, webkit_source_.extraData()); |
| 204 | 211 |
| 205 if (success) | 212 if (result == MEDIA_DEVICE_OK) { |
| 206 ++number_of_successful_constraints_applied_; | 213 ++number_of_successful_constraints_applied_; |
| 207 else | 214 } else { |
| 215 result_ = result; |
| 216 result_name_ = result_name; |
| 208 ++number_of_failed_constraints_applied_; | 217 ++number_of_failed_constraints_applied_; |
| 218 } |
| 209 | 219 |
| 210 if (!track_to_release_.isNull()) { | 220 if (!track_to_release_.isNull()) { |
| 211 mock_source_ = NULL; | 221 mock_source_ = NULL; |
| 212 webkit_source_.reset(); | 222 webkit_source_.reset(); |
| 213 track_to_release_.reset(); | 223 track_to_release_.reset(); |
| 214 } | 224 } |
| 215 } | 225 } |
| 216 base::MessageLoopForUI message_loop_; | 226 base::MessageLoopForUI message_loop_; |
| 217 scoped_ptr<ChildProcess> child_process_; | 227 scoped_ptr<ChildProcess> child_process_; |
| 218 blink::WebMediaStreamTrack track_to_release_; | 228 blink::WebMediaStreamTrack track_to_release_; |
| 219 int number_of_successful_constraints_applied_; | 229 int number_of_successful_constraints_applied_; |
| 220 int number_of_failed_constraints_applied_; | 230 int number_of_failed_constraints_applied_; |
| 231 content::MediaStreamRequestResult result_; |
| 232 blink::WebString result_name_; |
| 221 blink::WebMediaStreamSource webkit_source_; | 233 blink::WebMediaStreamSource webkit_source_; |
| 222 // |mock_source_| is owned by |webkit_source_|. | 234 // |mock_source_| is owned by |webkit_source_|. |
| 223 MockMediaStreamVideoSource* mock_source_; | 235 MockMediaStreamVideoSource* mock_source_; |
| 224 }; | 236 }; |
| 225 | 237 |
| 226 TEST_F(MediaStreamVideoSourceTest, AddTrackAndStartSource) { | 238 TEST_F(MediaStreamVideoSourceTest, AddTrackAndStartSource) { |
| 227 blink::WebMediaConstraints constraints; | 239 blink::WebMediaConstraints constraints; |
| 228 constraints.initialize(); | 240 constraints.initialize(); |
| 229 blink::WebMediaStreamTrack track = CreateTrack("123", constraints); | 241 blink::WebMediaStreamTrack track = CreateTrack("123", constraints); |
| 230 mock_source()->CompleteGetSupportedFormats(); | 242 mock_source()->CompleteGetSupportedFormats(); |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 433 MediaStreamVideoSource::kDefaultHeight, | 445 MediaStreamVideoSource::kDefaultHeight, |
| 434 30); | 446 30); |
| 435 } | 447 } |
| 436 | 448 |
| 437 TEST_F(MediaStreamVideoSourceTest, InvalidMandatoryConstraint) { | 449 TEST_F(MediaStreamVideoSourceTest, InvalidMandatoryConstraint) { |
| 438 MockMediaConstraintFactory factory; | 450 MockMediaConstraintFactory factory; |
| 439 factory.AddMandatory("weird key", 640); | 451 factory.AddMandatory("weird key", 640); |
| 440 blink::WebMediaStreamTrack track = CreateTrack( | 452 blink::WebMediaStreamTrack track = CreateTrack( |
| 441 "123", factory.CreateWebMediaConstraints()); | 453 "123", factory.CreateWebMediaConstraints()); |
| 442 mock_source()->CompleteGetSupportedFormats(); | 454 mock_source()->CompleteGetSupportedFormats(); |
| 455 EXPECT_EQ(MEDIA_DEVICE_CONSTRAINT_NOT_SATISFIED, error_type()); |
| 456 EXPECT_EQ("weird key", error_name()); |
| 443 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); | 457 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); |
| 444 } | 458 } |
| 445 | 459 |
| 446 // Test that the source ignores an unknown optional constraint. | 460 // Test that the source ignores an unknown optional constraint. |
| 447 TEST_F(MediaStreamVideoSourceTest, InvalidOptionalConstraint) { | 461 TEST_F(MediaStreamVideoSourceTest, InvalidOptionalConstraint) { |
| 448 MockMediaConstraintFactory factory; | 462 MockMediaConstraintFactory factory; |
| 449 factory.AddOptional("weird key", 640); | 463 factory.AddOptional("weird key", 640); |
| 450 | 464 |
| 451 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), | 465 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), |
| 452 MediaStreamVideoSource::kDefaultWidth, | 466 MediaStreamVideoSource::kDefaultWidth, |
| (...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 801 // TODO(mcasas): When added, check |track|'s (WebMediaStreamTrack) Muted | 815 // TODO(mcasas): When added, check |track|'s (WebMediaStreamTrack) Muted |
| 802 // attribute, should be true. In the meantime, check the MediaStreamTrack's. | 816 // attribute, should be true. In the meantime, check the MediaStreamTrack's. |
| 803 EXPECT_EQ(MediaStreamTrack::GetTrack(track1)->GetMutedState(), true); | 817 EXPECT_EQ(MediaStreamTrack::GetTrack(track1)->GetMutedState(), true); |
| 804 EXPECT_EQ(MediaStreamTrack::GetTrack(track2)->GetMutedState(), true); | 818 EXPECT_EQ(MediaStreamTrack::GetTrack(track2)->GetMutedState(), true); |
| 805 | 819 |
| 806 MediaStreamVideoSink::RemoveFromVideoTrack(&sink1, track1); | 820 MediaStreamVideoSink::RemoveFromVideoTrack(&sink1, track1); |
| 807 MediaStreamVideoSink::RemoveFromVideoTrack(&sink2, track2); | 821 MediaStreamVideoSink::RemoveFromVideoTrack(&sink2, track2); |
| 808 } | 822 } |
| 809 | 823 |
| 810 } // namespace content | 824 } // namespace content |
| OLD | NEW |