| 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 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "base/location.h" | 12 #include "base/location.h" |
| 13 #include "base/macros.h" | 13 #include "base/macros.h" |
| 14 #include "base/run_loop.h" |
| 14 #include "base/single_thread_task_runner.h" | 15 #include "base/single_thread_task_runner.h" |
| 15 #include "base/strings/utf_string_conversions.h" | 16 #include "base/strings/utf_string_conversions.h" |
| 16 #include "base/synchronization/lock.h" | 17 #include "base/synchronization/lock.h" |
| 17 #include "chrome/browser/media/desktop_media_list_observer.h" | 18 #include "chrome/browser/media/desktop_media_list_observer.h" |
| 18 #include "content/public/test/test_browser_thread.h" | 19 #include "content/public/test/test_browser_thread.h" |
| 19 #include "testing/gmock/include/gmock/gmock.h" | 20 #include "testing/gmock/include/gmock/gmock.h" |
| 20 #include "testing/gtest/include/gtest/gtest.h" | 21 #include "testing/gtest/include/gtest/gtest.h" |
| 21 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h" | 22 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h" |
| 22 #include "third_party/webrtc/modules/desktop_capture/screen_capturer.h" | 23 #include "third_party/webrtc/modules/desktop_capture/screen_capturer.h" |
| 23 #include "third_party/webrtc/modules/desktop_capture/window_capturer.h" | 24 #include "third_party/webrtc/modules/desktop_capture/window_capturer.h" |
| (...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 315 .WillOnce(CheckListSize(model_.get(), static_cast<int>(i + 1))); | 316 .WillOnce(CheckListSize(model_.get(), static_cast<int>(i + 1))); |
| 316 } | 317 } |
| 317 for (size_t i = 0; i < source_count - 1; ++i) { | 318 for (size_t i = 0; i < source_count - 1; ++i) { |
| 318 EXPECT_CALL(observer_, OnSourceThumbnailChanged(model_.get(), i)); | 319 EXPECT_CALL(observer_, OnSourceThumbnailChanged(model_.get(), i)); |
| 319 } | 320 } |
| 320 EXPECT_CALL(observer_, | 321 EXPECT_CALL(observer_, |
| 321 OnSourceThumbnailChanged(model_.get(), source_count - 1)) | 322 OnSourceThumbnailChanged(model_.get(), source_count - 1)) |
| 322 .WillOnce(QuitMessageLoop(message_loop())); | 323 .WillOnce(QuitMessageLoop(message_loop())); |
| 323 } | 324 } |
| 324 model_->StartUpdating(&observer_); | 325 model_->StartUpdating(&observer_); |
| 325 message_loop()->Run(); | 326 base::RunLoop().Run(); |
| 326 | 327 |
| 327 if (screen) { | 328 if (screen) { |
| 328 EXPECT_EQ(model_->GetSource(0).id.type, DesktopMediaID::TYPE_SCREEN); | 329 EXPECT_EQ(model_->GetSource(0).id.type, DesktopMediaID::TYPE_SCREEN); |
| 329 EXPECT_EQ(model_->GetSource(0).id.id, 0); | 330 EXPECT_EQ(model_->GetSource(0).id.id, 0); |
| 330 } | 331 } |
| 331 | 332 |
| 332 for (size_t i = 0; i < window_count; ++i) { | 333 for (size_t i = 0; i < window_count; ++i) { |
| 333 size_t source_index = screen ? i + 1 : i; | 334 size_t source_index = screen ? i + 1 : i; |
| 334 EXPECT_EQ(model_->GetSource(source_index).id.type, | 335 EXPECT_EQ(model_->GetSource(source_index).id.type, |
| 335 DesktopMediaID::TYPE_WINDOW); | 336 DesktopMediaID::TYPE_WINDOW); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 383 | 384 |
| 384 const int index = kDefaultWindowCount + 1; | 385 const int index = kDefaultWindowCount + 1; |
| 385 EXPECT_CALL(observer_, OnSourceAdded(model_.get(), index)) | 386 EXPECT_CALL(observer_, OnSourceAdded(model_.get(), index)) |
| 386 .WillOnce(DoAll(CheckListSize(model_.get(), index + 1), | 387 .WillOnce(DoAll(CheckListSize(model_.get(), index + 1), |
| 387 QuitMessageLoop(message_loop()))); | 388 QuitMessageLoop(message_loop()))); |
| 388 | 389 |
| 389 webrtc::WindowCapturer::Window window; | 390 webrtc::WindowCapturer::Window window; |
| 390 AddNativeWindow(index); | 391 AddNativeWindow(index); |
| 391 window_capturer_->SetWindowList(window_list_); | 392 window_capturer_->SetWindowList(window_list_); |
| 392 | 393 |
| 393 message_loop()->Run(); | 394 base::RunLoop().Run(); |
| 394 | 395 |
| 395 EXPECT_EQ(model_->GetSource(index).id.type, DesktopMediaID::TYPE_WINDOW); | 396 EXPECT_EQ(model_->GetSource(index).id.type, DesktopMediaID::TYPE_WINDOW); |
| 396 EXPECT_EQ(model_->GetSource(index).id.id, index); | 397 EXPECT_EQ(model_->GetSource(index).id.id, index); |
| 397 } | 398 } |
| 398 | 399 |
| 399 #if defined(ENABLE_AURA_WINDOW_TESTS) | 400 #if defined(ENABLE_AURA_WINDOW_TESTS) |
| 400 TEST_F(NativeDesktopMediaListTest, AddAuraWindow) { | 401 TEST_F(NativeDesktopMediaListTest, AddAuraWindow) { |
| 401 AddWindowsAndVerify(true, kDefaultWindowCount, kDefaultAuraCount, false); | 402 AddWindowsAndVerify(true, kDefaultWindowCount, kDefaultAuraCount, false); |
| 402 | 403 |
| 403 const int index = kDefaultWindowCount + 1; | 404 const int index = kDefaultWindowCount + 1; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 421 TEST_F(NativeDesktopMediaListTest, RemoveNativeWindow) { | 422 TEST_F(NativeDesktopMediaListTest, RemoveNativeWindow) { |
| 422 AddWindowsAndVerify(true, kDefaultWindowCount, kDefaultAuraCount, false); | 423 AddWindowsAndVerify(true, kDefaultWindowCount, kDefaultAuraCount, false); |
| 423 | 424 |
| 424 EXPECT_CALL(observer_, OnSourceRemoved(model_.get(), 1)) | 425 EXPECT_CALL(observer_, OnSourceRemoved(model_.get(), 1)) |
| 425 .WillOnce(DoAll(CheckListSize(model_.get(), kDefaultWindowCount), | 426 .WillOnce(DoAll(CheckListSize(model_.get(), kDefaultWindowCount), |
| 426 QuitMessageLoop(message_loop()))); | 427 QuitMessageLoop(message_loop()))); |
| 427 | 428 |
| 428 window_list_.erase(window_list_.begin()); | 429 window_list_.erase(window_list_.begin()); |
| 429 window_capturer_->SetWindowList(window_list_); | 430 window_capturer_->SetWindowList(window_list_); |
| 430 | 431 |
| 431 message_loop()->Run(); | 432 base::RunLoop().Run(); |
| 432 } | 433 } |
| 433 | 434 |
| 434 #if defined(ENABLE_AURA_WINDOW_TESTS) | 435 #if defined(ENABLE_AURA_WINDOW_TESTS) |
| 435 TEST_F(NativeDesktopMediaListTest, RemoveAuraWindow) { | 436 TEST_F(NativeDesktopMediaListTest, RemoveAuraWindow) { |
| 436 AddWindowsAndVerify(true, kDefaultWindowCount, kDefaultAuraCount, false); | 437 AddWindowsAndVerify(true, kDefaultWindowCount, kDefaultAuraCount, false); |
| 437 | 438 |
| 438 int aura_window_start_index = kDefaultWindowCount - kDefaultAuraCount + 1; | 439 int aura_window_start_index = kDefaultWindowCount - kDefaultAuraCount + 1; |
| 439 EXPECT_CALL(observer_, OnSourceRemoved(model_.get(), aura_window_start_index)) | 440 EXPECT_CALL(observer_, OnSourceRemoved(model_.get(), aura_window_start_index)) |
| 440 .WillOnce(DoAll(CheckListSize(model_.get(), kDefaultWindowCount), | 441 .WillOnce(DoAll(CheckListSize(model_.get(), kDefaultWindowCount), |
| 441 QuitMessageLoop(message_loop()))); | 442 QuitMessageLoop(message_loop()))); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 455 EXPECT_CALL(observer_, OnSourceRemoved(model_.get(), 1)) | 456 EXPECT_CALL(observer_, OnSourceRemoved(model_.get(), 1)) |
| 456 .WillOnce(CheckListSize(model_.get(), kDefaultWindowCount - i)); | 457 .WillOnce(CheckListSize(model_.get(), kDefaultWindowCount - i)); |
| 457 } | 458 } |
| 458 EXPECT_CALL(observer_, OnSourceRemoved(model_.get(), 1)) | 459 EXPECT_CALL(observer_, OnSourceRemoved(model_.get(), 1)) |
| 459 .WillOnce(DoAll(CheckListSize(model_.get(), 1), | 460 .WillOnce(DoAll(CheckListSize(model_.get(), 1), |
| 460 QuitMessageLoop(message_loop()))); | 461 QuitMessageLoop(message_loop()))); |
| 461 | 462 |
| 462 window_list_.clear(); | 463 window_list_.clear(); |
| 463 window_capturer_->SetWindowList(window_list_); | 464 window_capturer_->SetWindowList(window_list_); |
| 464 | 465 |
| 465 message_loop()->Run(); | 466 base::RunLoop().Run(); |
| 466 } | 467 } |
| 467 | 468 |
| 468 TEST_F(NativeDesktopMediaListTest, UpdateTitle) { | 469 TEST_F(NativeDesktopMediaListTest, UpdateTitle) { |
| 469 AddWindowsAndVerify(true, kDefaultWindowCount, kDefaultAuraCount, false); | 470 AddWindowsAndVerify(true, kDefaultWindowCount, kDefaultAuraCount, false); |
| 470 | 471 |
| 471 EXPECT_CALL(observer_, OnSourceNameChanged(model_.get(), 1)) | 472 EXPECT_CALL(observer_, OnSourceNameChanged(model_.get(), 1)) |
| 472 .WillOnce(QuitMessageLoop(message_loop())); | 473 .WillOnce(QuitMessageLoop(message_loop())); |
| 473 | 474 |
| 474 const std::string kTestTitle = "New Title"; | 475 const std::string kTestTitle = "New Title"; |
| 475 window_list_[0].title = kTestTitle; | 476 window_list_[0].title = kTestTitle; |
| 476 window_capturer_->SetWindowList(window_list_); | 477 window_capturer_->SetWindowList(window_list_); |
| 477 | 478 |
| 478 message_loop()->Run(); | 479 base::RunLoop().Run(); |
| 479 | 480 |
| 480 EXPECT_EQ(model_->GetSource(1).name, base::UTF8ToUTF16(kTestTitle)); | 481 EXPECT_EQ(model_->GetSource(1).name, base::UTF8ToUTF16(kTestTitle)); |
| 481 } | 482 } |
| 482 | 483 |
| 483 TEST_F(NativeDesktopMediaListTest, UpdateThumbnail) { | 484 TEST_F(NativeDesktopMediaListTest, UpdateThumbnail) { |
| 484 AddWindowsAndVerify(true, kDefaultWindowCount, kDefaultAuraCount, false); | 485 AddWindowsAndVerify(true, kDefaultWindowCount, kDefaultAuraCount, false); |
| 485 | 486 |
| 486 // Aura windows' thumbnails may unpredictably change over time. | 487 // Aura windows' thumbnails may unpredictably change over time. |
| 487 for (size_t i = kDefaultWindowCount - kDefaultAuraCount; | 488 for (size_t i = kDefaultWindowCount - kDefaultAuraCount; |
| 488 i < kDefaultWindowCount; ++i) { | 489 i < kDefaultWindowCount; ++i) { |
| 489 EXPECT_CALL(observer_, OnSourceThumbnailChanged(model_.get(), i + 1)) | 490 EXPECT_CALL(observer_, OnSourceThumbnailChanged(model_.get(), i + 1)) |
| 490 .Times(testing::AnyNumber()); | 491 .Times(testing::AnyNumber()); |
| 491 } | 492 } |
| 492 | 493 |
| 493 EXPECT_CALL(observer_, OnSourceThumbnailChanged(model_.get(), 1)) | 494 EXPECT_CALL(observer_, OnSourceThumbnailChanged(model_.get(), 1)) |
| 494 .WillOnce(QuitMessageLoop(message_loop())); | 495 .WillOnce(QuitMessageLoop(message_loop())); |
| 495 | 496 |
| 496 // Update frame for the window and verify that we get notification about it. | 497 // Update frame for the window and verify that we get notification about it. |
| 497 window_capturer_->SetNextFrameValue(1, 10); | 498 window_capturer_->SetNextFrameValue(1, 10); |
| 498 | 499 |
| 499 message_loop()->Run(); | 500 base::RunLoop().Run(); |
| 500 } | 501 } |
| 501 | 502 |
| 502 TEST_F(NativeDesktopMediaListTest, MoveWindow) { | 503 TEST_F(NativeDesktopMediaListTest, MoveWindow) { |
| 503 AddWindowsAndVerify(true, kDefaultWindowCount, kDefaultAuraCount, false); | 504 AddWindowsAndVerify(true, kDefaultWindowCount, kDefaultAuraCount, false); |
| 504 | 505 |
| 505 EXPECT_CALL(observer_, OnSourceMoved(model_.get(), 2, 1)) | 506 EXPECT_CALL(observer_, OnSourceMoved(model_.get(), 2, 1)) |
| 506 .WillOnce(DoAll(CheckListSize(model_.get(), kDefaultWindowCount + 1), | 507 .WillOnce(DoAll(CheckListSize(model_.get(), kDefaultWindowCount + 1), |
| 507 QuitMessageLoop(message_loop()))); | 508 QuitMessageLoop(message_loop()))); |
| 508 | 509 |
| 509 // Swap the two windows. | 510 // Swap the two windows. |
| 510 webrtc::WindowCapturer::Window temp = window_list_[0]; | 511 webrtc::WindowCapturer::Window temp = window_list_[0]; |
| 511 window_list_[0] = window_list_[1]; | 512 window_list_[0] = window_list_[1]; |
| 512 window_list_[1] = temp; | 513 window_list_[1] = temp; |
| 513 window_capturer_->SetWindowList(window_list_); | 514 window_capturer_->SetWindowList(window_list_); |
| 514 | 515 |
| 515 message_loop()->Run(); | 516 base::RunLoop().Run(); |
| 516 } | 517 } |
| OLD | NEW |