Index: chrome/browser/media/desktop_media_picker_model_unittest.cc |
diff --git a/chrome/browser/media/desktop_media_picker_model_unittest.cc b/chrome/browser/media/desktop_media_picker_model_unittest.cc |
deleted file mode 100644 |
index 05f40e538d183bf54838f6811b0e32bff2edddf3..0000000000000000000000000000000000000000 |
--- a/chrome/browser/media/desktop_media_picker_model_unittest.cc |
+++ /dev/null |
@@ -1,443 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/media/desktop_media_picker_model.h" |
- |
-#include "base/message_loop/message_loop.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "base/synchronization/lock.h" |
-#include "content/public/test/test_browser_thread.h" |
-#include "testing/gmock/include/gmock/gmock.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
-#include "third_party/webrtc/modules/desktop_capture/desktop_frame.h" |
-#include "third_party/webrtc/modules/desktop_capture/screen_capturer.h" |
-#include "third_party/webrtc/modules/desktop_capture/window_capturer.h" |
- |
-using testing::_; |
-using testing::DoAll; |
- |
-namespace { |
- |
-class MockObserver : public DesktopMediaPickerModel::Observer { |
- public: |
- MOCK_METHOD1(OnSourceAdded, void(int index)); |
- MOCK_METHOD1(OnSourceRemoved, void(int index)); |
- MOCK_METHOD1(OnSourceNameChanged, void(int index)); |
- MOCK_METHOD1(OnSourceThumbnailChanged, void(int index)); |
-}; |
- |
-class FakeScreenCapturer : public webrtc::ScreenCapturer { |
- public: |
- FakeScreenCapturer() {} |
- virtual ~FakeScreenCapturer() {} |
- |
- // webrtc::ScreenCapturer implementation. |
- virtual void Start(Callback* callback) OVERRIDE { |
- callback_ = callback; |
- } |
- |
- virtual void Capture(const webrtc::DesktopRegion& region) OVERRIDE { |
- DCHECK(callback_); |
- webrtc::DesktopFrame* frame = |
- new webrtc::BasicDesktopFrame(webrtc::DesktopSize(10, 10)); |
- memset(frame->data(), 0, frame->stride() * frame->size().height()); |
- callback_->OnCaptureCompleted(frame); |
- } |
- |
- virtual void SetMouseShapeObserver( |
- MouseShapeObserver* mouse_shape_observer) OVERRIDE { |
- NOTIMPLEMENTED(); |
- } |
- |
- protected: |
- Callback* callback_; |
- |
- DISALLOW_COPY_AND_ASSIGN(FakeScreenCapturer); |
-}; |
- |
-class FakeWindowCapturer : public webrtc::WindowCapturer { |
- public: |
- FakeWindowCapturer() |
- : callback_(NULL) { |
- } |
- virtual ~FakeWindowCapturer() {} |
- |
- void SetWindowList(const WindowList& list) { |
- base::AutoLock lock(window_list_lock_); |
- window_list_ = list; |
- } |
- |
- // Sets |value| thats going to be used to memset() content of the frames |
- // generated for |window_id|. By default generated frames are set to zeros. |
- void SetNextFrameValue(WindowId window_id, int8_t value) { |
- base::AutoLock lock(frame_values_lock_); |
- frame_values_[window_id] = value; |
- } |
- |
- // webrtc::WindowCapturer implementation. |
- virtual void Start(Callback* callback) OVERRIDE { |
- callback_ = callback; |
- } |
- |
- virtual void Capture(const webrtc::DesktopRegion& region) OVERRIDE { |
- DCHECK(callback_); |
- |
- base::AutoLock lock(frame_values_lock_); |
- |
- std::map<WindowId, int8_t>::iterator it = |
- frame_values_.find(selected_window_id_); |
- int8_t value = (it != frame_values_.end()) ? it->second : 0; |
- webrtc::DesktopFrame* frame = |
- new webrtc::BasicDesktopFrame(webrtc::DesktopSize(10, 10)); |
- memset(frame->data(), value, frame->stride() * frame->size().height()); |
- callback_->OnCaptureCompleted(frame); |
- } |
- |
- virtual bool GetWindowList(WindowList* windows) OVERRIDE { |
- base::AutoLock lock(window_list_lock_); |
- *windows = window_list_; |
- return true; |
- } |
- |
- virtual bool SelectWindow(WindowId id) OVERRIDE { |
- selected_window_id_ = id; |
- return true; |
- } |
- |
- private: |
- Callback* callback_; |
- WindowList window_list_; |
- base::Lock window_list_lock_; |
- |
- WindowId selected_window_id_; |
- |
- // Frames to be captured per window. |
- std::map<WindowId, int8_t> frame_values_; |
- base::Lock frame_values_lock_; |
- |
- DISALLOW_COPY_AND_ASSIGN(FakeWindowCapturer); |
-}; |
- |
-class DesktopMediaPickerModelTest : public testing::Test { |
- public: |
- DesktopMediaPickerModelTest() |
- : window_capturer_(NULL), |
- ui_thread_(content::BrowserThread::UI, |
- &message_loop_) { |
- } |
- |
- void CreateWithDefaultCapturers() { |
- window_capturer_ = new FakeWindowCapturer(); |
- model_.reset(new DesktopMediaPickerModelImpl( |
- scoped_ptr<webrtc::ScreenCapturer>(new FakeScreenCapturer()), |
- scoped_ptr<webrtc::WindowCapturer>(window_capturer_))); |
- |
- // Set update period to reduce the time it takes to run tests. |
- model_->SetUpdatePeriod(base::TimeDelta::FromMilliseconds(0)); |
- } |
- |
- protected: |
- // Must be listed before |model_|, so it's destroyed last. |
- MockObserver observer_; |
- |
- // Owned by |model_|; |
- FakeWindowCapturer* window_capturer_; |
- |
- scoped_ptr<DesktopMediaPickerModelImpl> model_; |
- |
- base::MessageLoop message_loop_; |
- content::TestBrowserThread ui_thread_; |
- |
- DISALLOW_COPY_AND_ASSIGN(DesktopMediaPickerModelTest); |
-}; |
- |
-ACTION_P2(CheckListSize, model, expected_list_size) { |
- EXPECT_EQ(expected_list_size, model->source_count()); |
-} |
- |
-ACTION_P(QuitMessageLoop, message_loop) { |
- message_loop->PostTask(FROM_HERE, base::MessageLoop::QuitClosure()); |
-} |
- |
-TEST_F(DesktopMediaPickerModelTest, InitialSourceList) { |
- CreateWithDefaultCapturers(); |
- |
- webrtc::WindowCapturer::WindowList list; |
- webrtc::WindowCapturer::Window window; |
- window.id = 0; |
- window.title = "Test window"; |
- list.push_back(window); |
- window_capturer_->SetWindowList(list); |
- |
- { |
- testing::InSequence dummy; |
- EXPECT_CALL(observer_, OnSourceAdded(0)) |
- .WillOnce(CheckListSize(model_.get(), 1)); |
- EXPECT_CALL(observer_, OnSourceAdded(1)) |
- .WillOnce(CheckListSize(model_.get(), 2)); |
- EXPECT_CALL(observer_, OnSourceThumbnailChanged(0)); |
- EXPECT_CALL(observer_, OnSourceThumbnailChanged(1)) |
- .WillOnce(QuitMessageLoop(&message_loop_)); |
- } |
- model_->StartUpdating(&observer_); |
- |
- message_loop_.Run(); |
- |
- EXPECT_EQ(model_->source(0).id.type, content::DesktopMediaID::TYPE_SCREEN); |
- EXPECT_EQ(model_->source(0).id.id, 0); |
- EXPECT_EQ(model_->source(1).id.type, content::DesktopMediaID::TYPE_WINDOW); |
- EXPECT_EQ(model_->source(1).id.id, 0); |
- EXPECT_EQ(model_->source(1).name, UTF8ToUTF16(window.title)); |
-} |
- |
-// Verifies that the window specified with SetViewDialogWindowId() is filtered |
-// from the results. |
-TEST_F(DesktopMediaPickerModelTest, Filtering) { |
- CreateWithDefaultCapturers(); |
- |
- webrtc::WindowCapturer::WindowList list; |
- webrtc::WindowCapturer::Window window; |
- |
- window.id = 0; |
- window.title = "Test window"; |
- list.push_back(window); |
- |
- window.id = 1; |
- list.push_back(window); |
- |
- window_capturer_->SetWindowList(list); |
- |
- { |
- testing::InSequence dummy; |
- EXPECT_CALL(observer_, OnSourceAdded(0)) |
- .WillOnce(CheckListSize(model_.get(), 1)); |
- EXPECT_CALL(observer_, OnSourceAdded(1)) |
- .WillOnce(CheckListSize(model_.get(), 2)); |
- EXPECT_CALL(observer_, OnSourceThumbnailChanged(0)); |
- EXPECT_CALL(observer_, OnSourceThumbnailChanged(1)) |
- .WillOnce(QuitMessageLoop(&message_loop_)); |
- } |
- |
- model_->SetViewDialogWindowId(0); |
- |
- model_->StartUpdating(&observer_); |
- message_loop_.Run(); |
- |
- EXPECT_EQ(model_->source(0).id.type, content::DesktopMediaID::TYPE_SCREEN); |
- EXPECT_EQ(model_->source(0).id.id, 0); |
- EXPECT_EQ(model_->source(1).id.type, content::DesktopMediaID::TYPE_WINDOW); |
- EXPECT_EQ(model_->source(1).id.id, 1); |
- EXPECT_EQ(model_->source(1).name, UTF8ToUTF16(window.title)); |
-} |
- |
-TEST_F(DesktopMediaPickerModelTest, WindowsOnly) { |
- window_capturer_ = new FakeWindowCapturer(); |
- model_.reset(new DesktopMediaPickerModelImpl( |
- scoped_ptr<webrtc::ScreenCapturer>(), |
- scoped_ptr<webrtc::WindowCapturer>(window_capturer_))); |
- |
- webrtc::WindowCapturer::WindowList list; |
- webrtc::WindowCapturer::Window window; |
- window.id = 0; |
- window.title = "Test window"; |
- list.push_back(window); |
- window_capturer_->SetWindowList(list); |
- |
- { |
- testing::InSequence dummy; |
- EXPECT_CALL(observer_, OnSourceAdded(0)) |
- .WillOnce(CheckListSize(model_.get(), 1)); |
- EXPECT_CALL(observer_, OnSourceThumbnailChanged(0)) |
- .WillOnce(QuitMessageLoop(&message_loop_)); |
- } |
- model_->StartUpdating(&observer_); |
- |
- message_loop_.Run(); |
- |
- EXPECT_EQ(model_->source(0).id.type, content::DesktopMediaID::TYPE_WINDOW); |
-} |
- |
-TEST_F(DesktopMediaPickerModelTest, ScreenOnly) { |
- model_.reset(new DesktopMediaPickerModelImpl( |
- scoped_ptr<webrtc::ScreenCapturer>(new FakeScreenCapturer), |
- scoped_ptr<webrtc::WindowCapturer>())); |
- |
- { |
- testing::InSequence dummy; |
- EXPECT_CALL(observer_, OnSourceAdded(0)) |
- .WillOnce(CheckListSize(model_.get(), 1)); |
- EXPECT_CALL(observer_, OnSourceThumbnailChanged(0)) |
- .WillOnce(QuitMessageLoop(&message_loop_)); |
- } |
- model_->StartUpdating(&observer_); |
- |
- message_loop_.Run(); |
- |
- EXPECT_EQ(model_->source(0).id.type, content::DesktopMediaID::TYPE_SCREEN); |
-} |
- |
-TEST_F(DesktopMediaPickerModelTest, AddWindow) { |
- CreateWithDefaultCapturers(); |
- |
- webrtc::WindowCapturer::WindowList list; |
- webrtc::WindowCapturer::Window window; |
- window.id = 1; |
- window.title = "Test window 1"; |
- list.push_back(window); |
- window_capturer_->SetWindowList(list); |
- |
- { |
- testing::InSequence dummy; |
- EXPECT_CALL(observer_, OnSourceAdded(0)) |
- .WillOnce(CheckListSize(model_.get(), 1)); |
- EXPECT_CALL(observer_, OnSourceAdded(1)) |
- .WillOnce(CheckListSize(model_.get(), 2)); |
- EXPECT_CALL(observer_, OnSourceThumbnailChanged(0)); |
- EXPECT_CALL(observer_, OnSourceThumbnailChanged(1)) |
- .WillOnce(QuitMessageLoop(&message_loop_)); |
- } |
- model_->StartUpdating(&observer_); |
- |
- message_loop_.Run(); |
- |
- testing::Mock::VerifyAndClearExpectations(&observer_); |
- |
- EXPECT_CALL(observer_, OnSourceAdded(1)) |
- .WillOnce(DoAll(CheckListSize(model_.get(), 3), |
- QuitMessageLoop(&message_loop_))); |
- |
- window.id = 0; |
- window.title = "Test window 0"; |
- list.push_back(window); |
- window_capturer_->SetWindowList(list); |
- |
- message_loop_.Run(); |
- |
- EXPECT_EQ(model_->source(1).id.type, content::DesktopMediaID::TYPE_WINDOW); |
- EXPECT_EQ(model_->source(1).id.id, 0); |
-} |
- |
-TEST_F(DesktopMediaPickerModelTest, RemoveWindow) { |
- CreateWithDefaultCapturers(); |
- |
- webrtc::WindowCapturer::WindowList list; |
- webrtc::WindowCapturer::Window window; |
- window.id = 0; |
- window.title = "Test window 0"; |
- list.push_back(window); |
- window.id = 1; |
- window.title = "Test window 1"; |
- list.push_back(window); |
- window_capturer_->SetWindowList(list); |
- |
- { |
- testing::InSequence dummy; |
- EXPECT_CALL(observer_, OnSourceAdded(0)) |
- .WillOnce(CheckListSize(model_.get(), 1)); |
- EXPECT_CALL(observer_, OnSourceAdded(1)) |
- .WillOnce(CheckListSize(model_.get(), 2)); |
- EXPECT_CALL(observer_, OnSourceAdded(2)) |
- .WillOnce(CheckListSize(model_.get(), 3)); |
- EXPECT_CALL(observer_, OnSourceThumbnailChanged(0)); |
- EXPECT_CALL(observer_, OnSourceThumbnailChanged(1)); |
- EXPECT_CALL(observer_, OnSourceThumbnailChanged(2)) |
- .WillOnce(QuitMessageLoop(&message_loop_)); |
- } |
- model_->StartUpdating(&observer_); |
- |
- message_loop_.Run(); |
- |
- testing::Mock::VerifyAndClearExpectations(&observer_); |
- |
- EXPECT_CALL(observer_, OnSourceRemoved(1)) |
- .WillOnce(DoAll(CheckListSize(model_.get(), 2), |
- QuitMessageLoop(&message_loop_))); |
- |
- list.erase(list.begin()); |
- window_capturer_->SetWindowList(list); |
- |
- message_loop_.Run(); |
-} |
- |
-TEST_F(DesktopMediaPickerModelTest, UpdateTitle) { |
- CreateWithDefaultCapturers(); |
- |
- webrtc::WindowCapturer::WindowList list; |
- webrtc::WindowCapturer::Window window; |
- window.id = 0; |
- window.title = "Test window"; |
- list.push_back(window); |
- window_capturer_->SetWindowList(list); |
- |
- { |
- testing::InSequence dummy; |
- EXPECT_CALL(observer_, OnSourceAdded(0)) |
- .WillOnce(CheckListSize(model_.get(), 1)); |
- EXPECT_CALL(observer_, OnSourceAdded(1)) |
- .WillOnce(CheckListSize(model_.get(), 2)); |
- EXPECT_CALL(observer_, OnSourceThumbnailChanged(0)); |
- EXPECT_CALL(observer_, OnSourceThumbnailChanged(1)) |
- .WillOnce(QuitMessageLoop(&message_loop_)); |
- } |
- model_->StartUpdating(&observer_); |
- |
- message_loop_.Run(); |
- |
- testing::Mock::VerifyAndClearExpectations(&observer_); |
- |
- EXPECT_CALL(observer_, OnSourceNameChanged(1)) |
- .WillOnce(QuitMessageLoop(&message_loop_)); |
- |
- const std::string kTestTitle = "New Title"; |
- |
- list[0].title = kTestTitle; |
- window_capturer_->SetWindowList(list); |
- |
- message_loop_.Run(); |
- |
- EXPECT_EQ(model_->source(1).name, base::UTF8ToUTF16(kTestTitle)); |
-} |
- |
-TEST_F(DesktopMediaPickerModelTest, UpdateThumbnail) { |
- CreateWithDefaultCapturers(); |
- |
- webrtc::WindowCapturer::WindowList list; |
- webrtc::WindowCapturer::Window window; |
- window.id = 0; |
- window.title = "Test window 1"; |
- list.push_back(window); |
- window.id = 1; |
- window.title = "Test window 2"; |
- list.push_back(window); |
- window_capturer_->SetWindowList(list); |
- |
- { |
- testing::InSequence dummy; |
- EXPECT_CALL(observer_, OnSourceAdded(0)) |
- .WillOnce(CheckListSize(model_.get(), 1)); |
- EXPECT_CALL(observer_, OnSourceAdded(1)) |
- .WillOnce(CheckListSize(model_.get(), 2)); |
- EXPECT_CALL(observer_, OnSourceAdded(2)) |
- .WillOnce(CheckListSize(model_.get(), 3)); |
- EXPECT_CALL(observer_, OnSourceThumbnailChanged(0)); |
- EXPECT_CALL(observer_, OnSourceThumbnailChanged(1)); |
- EXPECT_CALL(observer_, OnSourceThumbnailChanged(2)) |
- .WillOnce(QuitMessageLoop(&message_loop_)); |
- } |
- model_->StartUpdating(&observer_); |
- |
- message_loop_.Run(); |
- |
- testing::Mock::VerifyAndClearExpectations(&observer_); |
- |
- EXPECT_CALL(observer_, OnSourceThumbnailChanged(1)) |
- .WillOnce(QuitMessageLoop(&message_loop_)); |
- |
- // Update frame for the window and verify that we get notification about it. |
- window_capturer_->SetNextFrameValue(0, 1); |
- |
- message_loop_.Run(); |
-} |
- |
-} // namespace |