OLD | NEW |
---|---|
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 <string> | 5 #include <string> |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
9 #include "content/browser/browser_thread_impl.h" | 9 #include "content/browser/browser_thread_impl.h" |
10 #include "content/browser/renderer_host/media/media_stream_device_settings.h" | 10 #include "content/browser/renderer_host/media/media_stream_device_settings.h" |
11 #include "content/browser/renderer_host/media/media_stream_settings_requester.h" | 11 #include "content/browser/renderer_host/media/media_stream_settings_requester.h" |
12 #include "content/common/media/media_stream_options.h" | 12 #include "content/common/media/media_stream_options.h" |
13 #include "testing/gmock/include/gmock/gmock.h" | 13 #include "testing/gmock/include/gmock/gmock.h" |
14 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
15 | 15 |
16 using content::BrowserThread; | 16 using content::BrowserThread; |
17 using content::BrowserThreadImpl; | 17 using content::BrowserThreadImpl; |
18 using testing::_; | |
18 | 19 |
19 namespace media_stream { | 20 namespace media_stream { |
20 | 21 |
21 // Test class. | 22 // Test class. |
22 class MediaStreamDeviceSettingsTest | 23 class MediaStreamDeviceSettingsTest |
23 : public ::testing::Test, | 24 : public ::testing::Test, |
24 public SettingsRequester { | 25 public SettingsRequester { |
25 public: | 26 public: |
26 MediaStreamDeviceSettingsTest() : label_("dummy_stream") {} | 27 MediaStreamDeviceSettingsTest() {} |
27 | 28 |
28 // Mock implementation of SettingsRequester; | 29 // Mock implementation of SettingsRequester; |
29 MOCK_METHOD2(DevicesAccepted, void(const std::string&, | 30 MOCK_METHOD2(DevicesAccepted, void(const std::string&, |
30 const StreamDeviceInfoArray&)); | 31 const StreamDeviceInfoArray&)); |
31 MOCK_METHOD1(SettingsError, void(const std::string&)); | 32 MOCK_METHOD1(SettingsError, void(const std::string&)); |
32 | 33 |
33 protected: | 34 protected: |
34 virtual void SetUp() { | 35 virtual void SetUp() { |
35 message_loop_.reset(new MessageLoop(MessageLoop::TYPE_IO)); | 36 message_loop_.reset(new MessageLoop(MessageLoop::TYPE_IO)); |
36 ui_thread_.reset(new BrowserThreadImpl(BrowserThread::UI, | 37 ui_thread_.reset(new BrowserThreadImpl(BrowserThread::UI, |
37 message_loop_.get())); | 38 message_loop_.get())); |
38 io_thread_.reset(new BrowserThreadImpl(BrowserThread::IO, | 39 io_thread_.reset(new BrowserThreadImpl(BrowserThread::IO, |
39 message_loop_.get())); | 40 message_loop_.get())); |
40 device_settings_.reset(new MediaStreamDeviceSettings(this)); | 41 device_settings_.reset(new MediaStreamDeviceSettings(this)); |
41 } | 42 } |
42 | 43 |
43 virtual void TearDown() { | 44 virtual void TearDown() { |
44 message_loop_->RunAllPending(); | 45 message_loop_->RunAllPending(); |
45 } | 46 } |
46 | 47 |
47 void CreateDummyRequest() { | 48 void CreateDummyRequest(const std::string& label, bool audio, bool video) { |
48 int dummy_render_process_id = 1; | 49 int dummy_render_process_id = 1; |
49 int dummy_render_view_id = 1; | 50 int dummy_render_view_id = 1; |
50 StreamOptions components(true, false); | 51 StreamOptions components(audio, video); |
51 GURL security_origin; | 52 GURL security_origin; |
52 device_settings_->RequestCaptureDeviceUsage(label_, | 53 device_settings_->RequestCaptureDeviceUsage(label, |
53 dummy_render_process_id, | 54 dummy_render_process_id, |
54 dummy_render_view_id, | 55 dummy_render_view_id, |
55 components, | 56 components, |
56 security_origin); | 57 security_origin); |
58 if (audio) | |
59 CreateAudioDeviceForRequset(label); | |
57 | 60 |
58 // Setup the dummy available device for the reqest. | 61 if (video) |
62 CreateVideoDeviceForRequset(label); | |
63 } | |
64 | |
65 void CreateAudioDeviceForRequset(const std::string& label) { | |
66 // Setup the dummy available device for the request. | |
59 media_stream::StreamDeviceInfoArray audio_device_array(1); | 67 media_stream::StreamDeviceInfoArray audio_device_array(1); |
60 media_stream::StreamDeviceInfo dummy_audio_device; | 68 media_stream::StreamDeviceInfo dummy_audio_device; |
61 dummy_audio_device.name = "Microphone"; | 69 dummy_audio_device.name = "Microphone"; |
62 dummy_audio_device.stream_type = | 70 dummy_audio_device.stream_type = |
63 content::MEDIA_STREAM_DEVICE_TYPE_AUDIO_CAPTURE; | 71 content::MEDIA_STREAM_DEVICE_TYPE_AUDIO_CAPTURE; |
64 dummy_audio_device.session_id = 1; | 72 dummy_audio_device.session_id = 1; |
65 audio_device_array[0] = dummy_audio_device; | 73 audio_device_array[0] = dummy_audio_device; |
66 device_settings_->AvailableDevices(label_, | 74 device_settings_->AvailableDevices(label, |
67 dummy_audio_device.stream_type, | 75 dummy_audio_device.stream_type, |
68 audio_device_array); | 76 audio_device_array); |
69 } | 77 } |
70 | 78 |
79 void CreateVideoDeviceForRequset(const std::string& label) { | |
80 // Setup the dummy available device for the request. | |
scherkus (not reviewing)
2012/08/13 19:51:22
this block is over-indented by 2 spaces
no longer working on chromium
2012/08/14 11:17:04
Done.
| |
81 media_stream::StreamDeviceInfoArray video_device_array(1); | |
82 media_stream::StreamDeviceInfo dummy_video_device; | |
83 dummy_video_device.name = "camera"; | |
84 dummy_video_device.stream_type = | |
85 content::MEDIA_STREAM_DEVICE_TYPE_VIDEO_CAPTURE; | |
86 dummy_video_device.session_id = 1; | |
87 video_device_array[0] = dummy_video_device; | |
88 device_settings_->AvailableDevices(label, | |
89 dummy_video_device.stream_type, | |
90 video_device_array); | |
91 } | |
92 | |
71 scoped_ptr<MessageLoop> message_loop_; | 93 scoped_ptr<MessageLoop> message_loop_; |
72 scoped_ptr<BrowserThreadImpl> ui_thread_; | 94 scoped_ptr<BrowserThreadImpl> ui_thread_; |
73 scoped_ptr<BrowserThreadImpl> io_thread_; | 95 scoped_ptr<BrowserThreadImpl> io_thread_; |
74 scoped_ptr<MediaStreamDeviceSettings> device_settings_; | 96 scoped_ptr<MediaStreamDeviceSettings> device_settings_; |
75 const std::string label_; | |
76 | 97 |
77 private: | 98 private: |
78 DISALLOW_COPY_AND_ASSIGN(MediaStreamDeviceSettingsTest); | 99 DISALLOW_COPY_AND_ASSIGN(MediaStreamDeviceSettingsTest); |
79 }; | 100 }; |
80 | 101 |
81 TEST_F(MediaStreamDeviceSettingsTest, GenerateRequest) { | 102 TEST_F(MediaStreamDeviceSettingsTest, GenerateRequest) { |
82 CreateDummyRequest(); | 103 const std::string label = "dummy_label"; |
104 CreateDummyRequest(label, true, false); | |
83 | 105 |
84 // Expecting an error callback triggered by the non-existing | 106 // Expecting an error callback triggered by the non-existing |
85 // RenderViewHostImpl. | 107 // RenderViewHostImpl. |
86 EXPECT_CALL(*this, SettingsError(label_)) | 108 EXPECT_CALL(*this, SettingsError(label)); |
87 .Times(1); | |
88 } | 109 } |
89 | 110 |
90 TEST_F(MediaStreamDeviceSettingsTest, GenerateAndRemoveRequest) { | 111 TEST_F(MediaStreamDeviceSettingsTest, GenerateAndRemoveRequest) { |
91 CreateDummyRequest(); | 112 const std::string label = "label"; |
113 CreateDummyRequest(label, true, false); | |
92 | 114 |
93 // Remove the current request, it should not crash. | 115 // Remove the current request, it should not crash. |
94 device_settings_->RemovePendingCaptureRequest(label_); | 116 device_settings_->RemovePendingCaptureRequest(label); |
117 } | |
118 | |
119 TEST_F(MediaStreamDeviceSettingsTest, HandleRequestUsingFakeUI) { | |
120 device_settings_->UseFakeUI(); | |
121 | |
122 const std::string label = "label"; | |
123 CreateDummyRequest(label, true, true); | |
124 | |
125 // Remove the current request, it should not crash. | |
126 EXPECT_CALL(*this, DevicesAccepted(label, _)); | |
127 } | |
128 | |
129 TEST_F(MediaStreamDeviceSettingsTest, CreateMultipleRequestsAndCancelTheFirst) { | |
130 device_settings_->UseFakeUI(); | |
131 | |
132 // Create the first audio request. | |
133 const std::string label_1 = "label_1"; | |
134 CreateDummyRequest(label_1, true, false); | |
135 | |
136 // Create the second video request. | |
137 const std::string label_2 = "label_2"; | |
138 CreateDummyRequest(label_2, false, true); | |
139 | |
140 // Create the third audio and video request. | |
141 const std::string label_3 = "label_3"; | |
142 CreateDummyRequest(label_3, true, true); | |
143 | |
144 // Remove the first request which has been brought to the UI. | |
145 device_settings_->RemovePendingCaptureRequest(label_1); | |
146 | |
147 // We should get callbacks from the rest of the requests. | |
148 EXPECT_CALL(*this, DevicesAccepted(label_2, _)); | |
149 EXPECT_CALL(*this, DevicesAccepted(label_3, _)); | |
150 } | |
151 | |
152 TEST_F(MediaStreamDeviceSettingsTest, CreateMultipleRequestsAndCancelTheLast) { | |
153 device_settings_->UseFakeUI(); | |
154 | |
155 // Create the first audio request. | |
156 const std::string label_1 = "label_1"; | |
157 CreateDummyRequest(label_1, true, false); | |
158 | |
159 // Create the second video request. | |
160 const std::string label_2 = "label_2"; | |
161 CreateDummyRequest(label_2, false, true); | |
162 | |
163 // Create the third audio and video request. | |
164 const std::string label_3 = "label_3"; | |
165 CreateDummyRequest(label_3, true, true); | |
166 | |
167 // Remove the last request which is pending in the queue. | |
168 device_settings_->RemovePendingCaptureRequest(label_3); | |
169 | |
170 // We should get callbacks from the rest of the requests. | |
171 EXPECT_CALL(*this, DevicesAccepted(label_1, _)); | |
172 EXPECT_CALL(*this, DevicesAccepted(label_2, _)); | |
95 } | 173 } |
96 | 174 |
97 } // namespace media_stream | 175 } // namespace media_stream |
OLD | NEW |