OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "chrome/browser/media/native_desktop_media_list.h" | 5 #include "chrome/browser/media/native_desktop_media_list.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 #include <string.h> | 9 #include <string.h> |
10 | 10 |
(...skipping 11 matching lines...) Expand all Loading... |
22 #include "third_party/webrtc/modules/desktop_capture/screen_capturer.h" | 22 #include "third_party/webrtc/modules/desktop_capture/screen_capturer.h" |
23 #include "third_party/webrtc/modules/desktop_capture/window_capturer.h" | 23 #include "third_party/webrtc/modules/desktop_capture/window_capturer.h" |
24 | 24 |
25 using testing::_; | 25 using testing::_; |
26 using testing::DoAll; | 26 using testing::DoAll; |
27 | 27 |
28 namespace { | 28 namespace { |
29 | 29 |
30 class MockObserver : public DesktopMediaListObserver { | 30 class MockObserver : public DesktopMediaListObserver { |
31 public: | 31 public: |
32 MOCK_METHOD1(OnSourceAdded, void(int index)); | 32 MOCK_METHOD2(OnSourceAdded, void(DesktopMediaList* list, int index)); |
33 MOCK_METHOD1(OnSourceRemoved, void(int index)); | 33 MOCK_METHOD2(OnSourceRemoved, void(DesktopMediaList* list, int index)); |
34 MOCK_METHOD2(OnSourceMoved, void(int old_index, int new_index)); | 34 MOCK_METHOD3(OnSourceMoved, |
35 MOCK_METHOD1(OnSourceNameChanged, void(int index)); | 35 void(DesktopMediaList* list, int old_index, int new_index)); |
36 MOCK_METHOD1(OnSourceThumbnailChanged, void(int index)); | 36 MOCK_METHOD2(OnSourceNameChanged, void(DesktopMediaList* list, int index)); |
| 37 MOCK_METHOD2(OnSourceThumbnailChanged, |
| 38 void(DesktopMediaList* list, int index)); |
37 }; | 39 }; |
38 | 40 |
39 class FakeScreenCapturer : public webrtc::ScreenCapturer { | 41 class FakeScreenCapturer : public webrtc::ScreenCapturer { |
40 public: | 42 public: |
41 FakeScreenCapturer() {} | 43 FakeScreenCapturer() {} |
42 ~FakeScreenCapturer() override {} | 44 ~FakeScreenCapturer() override {} |
43 | 45 |
44 // webrtc::ScreenCapturer implementation. | 46 // webrtc::ScreenCapturer implementation. |
45 void Start(Callback* callback) override { callback_ = callback; } | 47 void Start(Callback* callback) override { callback_ = callback; } |
46 | 48 |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
168 window.id = i + 1; | 170 window.id = i + 1; |
169 window.title = "Test window"; | 171 window.title = "Test window"; |
170 list.push_back(window); | 172 list.push_back(window); |
171 } | 173 } |
172 window_capturer_->SetWindowList(list); | 174 window_capturer_->SetWindowList(list); |
173 | 175 |
174 { | 176 { |
175 testing::InSequence dummy; | 177 testing::InSequence dummy; |
176 size_t source_count = window_only ? count : count + 1; | 178 size_t source_count = window_only ? count : count + 1; |
177 for (size_t i = 0; i < source_count; ++i) { | 179 for (size_t i = 0; i < source_count; ++i) { |
178 EXPECT_CALL(observer_, OnSourceAdded(i)) | 180 EXPECT_CALL(observer_, OnSourceAdded(model_.get(), i)) |
179 .WillOnce(CheckListSize(model_.get(), static_cast<int>(i + 1))); | 181 .WillOnce(CheckListSize(model_.get(), static_cast<int>(i + 1))); |
180 } | 182 } |
181 for (size_t i = 0; i < source_count - 1; ++i) { | 183 for (size_t i = 0; i < source_count - 1; ++i) { |
182 EXPECT_CALL(observer_, OnSourceThumbnailChanged(i)); | 184 EXPECT_CALL(observer_, OnSourceThumbnailChanged(model_.get(), i)); |
183 } | 185 } |
184 EXPECT_CALL(observer_, OnSourceThumbnailChanged(source_count - 1)) | 186 EXPECT_CALL(observer_, |
185 .WillOnce(QuitMessageLoop(&message_loop_)); | 187 OnSourceThumbnailChanged(model_.get(), source_count - 1)) |
| 188 .WillOnce(QuitMessageLoop(&message_loop_)); |
186 } | 189 } |
187 model_->StartUpdating(&observer_); | 190 model_->StartUpdating(&observer_); |
188 message_loop_.Run(); | 191 message_loop_.Run(); |
189 | 192 |
190 for (size_t i = 0; i < count; ++i) { | 193 for (size_t i = 0; i < count; ++i) { |
191 size_t source_index = window_only ? i : i + 1; | 194 size_t source_index = window_only ? i : i + 1; |
192 EXPECT_EQ(model_->GetSource(source_index).id.type, | 195 EXPECT_EQ(model_->GetSource(source_index).id.type, |
193 content::DesktopMediaID::TYPE_WINDOW); | 196 content::DesktopMediaID::TYPE_WINDOW); |
194 EXPECT_EQ(model_->GetSource(source_index).id.id, static_cast<int>(i + 1)); | 197 EXPECT_EQ(model_->GetSource(source_index).id.id, static_cast<int>(i + 1)); |
195 EXPECT_EQ(model_->GetSource(source_index).name, | 198 EXPECT_EQ(model_->GetSource(source_index).name, |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
240 AddWindowsAndVerify(1, true); | 243 AddWindowsAndVerify(1, true); |
241 } | 244 } |
242 | 245 |
243 TEST_F(DesktopMediaListTest, ScreenOnly) { | 246 TEST_F(DesktopMediaListTest, ScreenOnly) { |
244 model_.reset(new NativeDesktopMediaList( | 247 model_.reset(new NativeDesktopMediaList( |
245 scoped_ptr<webrtc::ScreenCapturer>(new FakeScreenCapturer), | 248 scoped_ptr<webrtc::ScreenCapturer>(new FakeScreenCapturer), |
246 scoped_ptr<webrtc::WindowCapturer>())); | 249 scoped_ptr<webrtc::WindowCapturer>())); |
247 | 250 |
248 { | 251 { |
249 testing::InSequence dummy; | 252 testing::InSequence dummy; |
250 EXPECT_CALL(observer_, OnSourceAdded(0)) | 253 EXPECT_CALL(observer_, OnSourceAdded(model_.get(), 0)) |
251 .WillOnce(CheckListSize(model_.get(), 1)); | 254 .WillOnce(CheckListSize(model_.get(), 1)); |
252 EXPECT_CALL(observer_, OnSourceThumbnailChanged(0)) | 255 EXPECT_CALL(observer_, OnSourceThumbnailChanged(model_.get(), 0)) |
253 .WillOnce(QuitMessageLoop(&message_loop_)); | 256 .WillOnce(QuitMessageLoop(&message_loop_)); |
254 } | 257 } |
255 model_->StartUpdating(&observer_); | 258 model_->StartUpdating(&observer_); |
256 | 259 |
257 message_loop_.Run(); | 260 message_loop_.Run(); |
258 | 261 |
259 EXPECT_EQ(model_->GetSource(0).id.type, content::DesktopMediaID::TYPE_SCREEN); | 262 EXPECT_EQ(model_->GetSource(0).id.type, content::DesktopMediaID::TYPE_SCREEN); |
260 } | 263 } |
261 | 264 |
262 TEST_F(DesktopMediaListTest, AddWindow) { | 265 TEST_F(DesktopMediaListTest, AddWindow) { |
263 CreateWithDefaultCapturers(); | 266 CreateWithDefaultCapturers(); |
264 webrtc::WindowCapturer::WindowList list = AddWindowsAndVerify(1, false); | 267 webrtc::WindowCapturer::WindowList list = AddWindowsAndVerify(1, false); |
265 | 268 |
266 EXPECT_CALL(observer_, OnSourceAdded(2)) | 269 EXPECT_CALL(observer_, OnSourceAdded(model_.get(), 2)) |
267 .WillOnce(DoAll(CheckListSize(model_.get(), 3), | 270 .WillOnce(DoAll(CheckListSize(model_.get(), 3), |
268 QuitMessageLoop(&message_loop_))); | 271 QuitMessageLoop(&message_loop_))); |
269 | 272 |
270 webrtc::WindowCapturer::Window window; | 273 webrtc::WindowCapturer::Window window; |
271 window.id = 10; // id=0 is invalid. | 274 window.id = 10; // id=0 is invalid. |
272 window.title = "Test window 10"; | 275 window.title = "Test window 10"; |
273 list.push_back(window); | 276 list.push_back(window); |
274 window_capturer_->SetWindowList(list); | 277 window_capturer_->SetWindowList(list); |
275 | 278 |
276 message_loop_.Run(); | 279 message_loop_.Run(); |
277 | 280 |
278 EXPECT_EQ(model_->GetSource(2).id.type, content::DesktopMediaID::TYPE_WINDOW); | 281 EXPECT_EQ(model_->GetSource(2).id.type, content::DesktopMediaID::TYPE_WINDOW); |
279 EXPECT_EQ(model_->GetSource(2).id.id, 10); | 282 EXPECT_EQ(model_->GetSource(2).id.id, 10); |
280 } | 283 } |
281 | 284 |
282 TEST_F(DesktopMediaListTest, RemoveWindow) { | 285 TEST_F(DesktopMediaListTest, RemoveWindow) { |
283 CreateWithDefaultCapturers(); | 286 CreateWithDefaultCapturers(); |
284 webrtc::WindowCapturer::WindowList list = AddWindowsAndVerify(2, false); | 287 webrtc::WindowCapturer::WindowList list = AddWindowsAndVerify(2, false); |
285 | 288 |
286 EXPECT_CALL(observer_, OnSourceRemoved(2)) | 289 EXPECT_CALL(observer_, OnSourceRemoved(model_.get(), 2)) |
287 .WillOnce(DoAll(CheckListSize(model_.get(), 2), | 290 .WillOnce(DoAll(CheckListSize(model_.get(), 2), |
288 QuitMessageLoop(&message_loop_))); | 291 QuitMessageLoop(&message_loop_))); |
289 | 292 |
290 list.erase(list.begin() + 1); | 293 list.erase(list.begin() + 1); |
291 window_capturer_->SetWindowList(list); | 294 window_capturer_->SetWindowList(list); |
292 | 295 |
293 message_loop_.Run(); | 296 message_loop_.Run(); |
294 } | 297 } |
295 | 298 |
296 TEST_F(DesktopMediaListTest, RemoveAllWindows) { | 299 TEST_F(DesktopMediaListTest, RemoveAllWindows) { |
297 CreateWithDefaultCapturers(); | 300 CreateWithDefaultCapturers(); |
298 webrtc::WindowCapturer::WindowList list = AddWindowsAndVerify(2, false); | 301 webrtc::WindowCapturer::WindowList list = AddWindowsAndVerify(2, false); |
299 | 302 |
300 testing::InSequence seq; | 303 testing::InSequence seq; |
301 EXPECT_CALL(observer_, OnSourceRemoved(1)) | 304 EXPECT_CALL(observer_, OnSourceRemoved(model_.get(), 1)) |
302 .WillOnce(CheckListSize(model_.get(), 2)); | 305 .WillOnce(CheckListSize(model_.get(), 2)); |
303 EXPECT_CALL(observer_, OnSourceRemoved(1)) | 306 EXPECT_CALL(observer_, OnSourceRemoved(model_.get(), 1)) |
304 .WillOnce(DoAll(CheckListSize(model_.get(), 1), | 307 .WillOnce(DoAll(CheckListSize(model_.get(), 1), |
305 QuitMessageLoop(&message_loop_))); | 308 QuitMessageLoop(&message_loop_))); |
306 | 309 |
307 list.erase(list.begin(), list.end()); | 310 list.erase(list.begin(), list.end()); |
308 window_capturer_->SetWindowList(list); | 311 window_capturer_->SetWindowList(list); |
309 | 312 |
310 message_loop_.Run(); | 313 message_loop_.Run(); |
311 } | 314 } |
312 | 315 |
313 TEST_F(DesktopMediaListTest, UpdateTitle) { | 316 TEST_F(DesktopMediaListTest, UpdateTitle) { |
314 CreateWithDefaultCapturers(); | 317 CreateWithDefaultCapturers(); |
315 webrtc::WindowCapturer::WindowList list = AddWindowsAndVerify(1, false); | 318 webrtc::WindowCapturer::WindowList list = AddWindowsAndVerify(1, false); |
316 | 319 |
317 EXPECT_CALL(observer_, OnSourceNameChanged(1)) | 320 EXPECT_CALL(observer_, OnSourceNameChanged(model_.get(), 1)) |
318 .WillOnce(QuitMessageLoop(&message_loop_)); | 321 .WillOnce(QuitMessageLoop(&message_loop_)); |
319 | 322 |
320 const std::string kTestTitle = "New Title"; | 323 const std::string kTestTitle = "New Title"; |
321 | 324 |
322 list[0].title = kTestTitle; | 325 list[0].title = kTestTitle; |
323 window_capturer_->SetWindowList(list); | 326 window_capturer_->SetWindowList(list); |
324 | 327 |
325 message_loop_.Run(); | 328 message_loop_.Run(); |
326 | 329 |
327 EXPECT_EQ(model_->GetSource(1).name, base::UTF8ToUTF16(kTestTitle)); | 330 EXPECT_EQ(model_->GetSource(1).name, base::UTF8ToUTF16(kTestTitle)); |
328 } | 331 } |
329 | 332 |
330 TEST_F(DesktopMediaListTest, UpdateThumbnail) { | 333 TEST_F(DesktopMediaListTest, UpdateThumbnail) { |
331 CreateWithDefaultCapturers(); | 334 CreateWithDefaultCapturers(); |
332 AddWindowsAndVerify(2, false); | 335 AddWindowsAndVerify(2, false); |
333 | 336 |
334 EXPECT_CALL(observer_, OnSourceThumbnailChanged(1)) | 337 EXPECT_CALL(observer_, OnSourceThumbnailChanged(model_.get(), 1)) |
335 .WillOnce(QuitMessageLoop(&message_loop_)); | 338 .WillOnce(QuitMessageLoop(&message_loop_)); |
336 // Update frame for the window and verify that we get notification about it. | 339 // Update frame for the window and verify that we get notification about it. |
337 window_capturer_->SetNextFrameValue(1, 1); | 340 window_capturer_->SetNextFrameValue(1, 1); |
338 | 341 |
339 message_loop_.Run(); | 342 message_loop_.Run(); |
340 } | 343 } |
341 | 344 |
342 TEST_F(DesktopMediaListTest, MoveWindow) { | 345 TEST_F(DesktopMediaListTest, MoveWindow) { |
343 CreateWithDefaultCapturers(); | 346 CreateWithDefaultCapturers(); |
344 webrtc::WindowCapturer::WindowList list = AddWindowsAndVerify(2, false); | 347 webrtc::WindowCapturer::WindowList list = AddWindowsAndVerify(2, false); |
345 | 348 |
346 EXPECT_CALL(observer_, OnSourceMoved(2, 1)) | 349 EXPECT_CALL(observer_, OnSourceMoved(model_.get(), 2, 1)) |
347 .WillOnce(DoAll(CheckListSize(model_.get(), 3), | 350 .WillOnce(DoAll(CheckListSize(model_.get(), 3), |
348 QuitMessageLoop(&message_loop_))); | 351 QuitMessageLoop(&message_loop_))); |
349 | 352 |
350 // Swap the two windows. | 353 // Swap the two windows. |
351 webrtc::WindowCapturer::Window temp = list[0]; | 354 webrtc::WindowCapturer::Window temp = list[0]; |
352 list[0] = list[1]; | 355 list[0] = list[1]; |
353 list[1] = temp; | 356 list[1] = temp; |
354 window_capturer_->SetWindowList(list); | 357 window_capturer_->SetWindowList(list); |
355 | 358 |
356 message_loop_.Run(); | 359 message_loop_.Run(); |
357 } | 360 } |
358 | 361 |
359 } // namespace | 362 } // namespace |
OLD | NEW |